我有这个 python 线程代码。
import threading
def sum(value):
sum = 0
for i in range(value+1):
sum += i
print "I'm done with %d - %d\n" % (value, sum)
return sum
r = range(500001, 500000*2, 100)
ts = []
for u in r:
t = threading.Thread(target=sum, args = (u,))
ts.append(t)
t.start()
for t in ts:
t.join()
执行这个,我有数百个线程在工作。
但是,当我在 t.start() 之后移动 t.join() 时,我只有两个线程在工作。
for u in r:
t = threading.Thread(target=sum, args = (u,))
ts.append(t)
t.start()
t.join()
我用不调用 t.join() 的代码进行了测试,但它似乎工作正常?
那么何时、如何以及如何使用 thread.join()?
最佳答案
您似乎不明白Thread.join
的作用。调用 join
时,当前 线程将阻塞,直到该线程完成。因此,您正在等待线程完成,从而阻止您启动任何其他线程。
join
背后的想法是在继续之前等待其他线程。在您的情况下,您想等待所有线程完成在主程序结束。否则,如果你不这样做,主程序就会结束,那么它创建的所有线程都会被杀死。所以通常,你应该在最后有一个循环,它连接所有创建的线程以防止主线程提前退出。
关于python - 何时、为何以及如何在 Python 中调用 thread.join()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21486105/