多线程进程结束了吗? -> 为什么之后会滞后?
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 个线程还活着!他们已经完成了他们的工作,他们已经离开了,否则他们还在工作。
我以前从未使用过多线程,所以我搜索了一个简单的例子,发现了 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 个线程还活着!他们已经完成了他们的工作,他们已经离开了,否则他们还在工作。