多线程进程结束了吗? -> 为什么之后会滞后?

Multithread process finished? -> why laggs afterwards?

我以前从未使用过多线程,所以我搜索了一个简单的例子,发现了 8 年前的这种方法,它打开 10 个线程,然后再加入它们:

(我喜欢它,因为我还需要保存线程函数的结果)

How to get the return value from a thread in python?

def foo(bar, result, index):
    print 'hello {0}'.format(bar)
    result[index] = "foo"

from threading import Thread

threads = [None] * 10
results = [None] * 10

for i in range(len(threads)):
    threads[i] = Thread(target=foo, args=('world!', results, i))
    threads[i].start()

# do some other stuff

for i in range(len(threads)):
    threads[i].join()

print " ".join(results)

我设法将它实现到我的代码中(我知道没有多线程也能正常工作)并且实现有效:没有错误,似乎一切都完成了并且做了它应该做的事情。

紧接着iPython几乎没有反应了(超慢)所以我不能继续工作。 (我几乎无法打字,而且我在 iPython 中输入的新代码运行起来超级慢)

任何可能导致问题的想法?

根据 ResourceManager,CPU 仍在处理某些事情。但为什么?剧本写完了!至少我有 99% 的把握做到了。 我真的很感谢任何提示!

他们在“#do some other stuff”中是什么?您可以在末尾添加 is_alive() 以检查是否是线程或其他一些东西导致了这种滞后。

经过最少编辑的代码(w.r.t。你的)如下。

def foo(bar, result, index):
    print 'hello {0}'.format(bar)
    result[index] = "foo"

from threading import Thread

threads = [None] * 10
results = [None] * 10

for i in range(len(threads)):
    threads[i] = Thread(target=foo, args=('world!', results, i))
    threads[i].start()

# do some other stuff

for i in range(len(threads)):
    threads[i].join()

print " ".join(results)

for i in range(len(threads)):
    print(threads[i].is_alive())

如果最后它打印 10 次 False,那么 none 个线程还活着!他们已经完成了他们的工作,他们已经离开了,否则他们还在工作。