多线程进程完成?->为什么之后会滞后?



我以前从未使用过多线程,因此我搜索了一个简单的示例,并从8年前找到了这种方法,该方法打开了10个线程并以后加入:

(我喜欢它,因为我还需要保存线程功能的结果(

如何从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%的人肯定会这样做。我真的很感谢任何提示!

他们在"#做其他事情"中是什么?您可以添加到端iS_alive((以检查是线程还是其他引起此滞后的东西。

最小编辑的代码(W.R.T. YORS(如下。

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,那么您的线程都没有活着!他们已经完成了自己的工作,并且妨碍了他们,否则他们仍在工作。

最新更新