python - 何时、为何以及如何在 Python 中调用 thread.join()?

标签 python multithreading

我有这个 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()

执行这个,我有数百个线程在工作。

enter image description here

但是,当我在 t.start() 之后移动 t.join() 时,我只有两个线程在工作。

for u in r:
    t = threading.Thread(target=sum, args = (u,))
    ts.append(t)
    t.start()
    t.join()

enter image description here

我用调用 t.join() 的代码进行了测试,但它似乎工作正常?

那么何时、如何以及如何使用 thread.join()?

最佳答案

您似乎不明白Thread.join 的作用。调用 join 时,当前 线程将阻塞,直到该线程完成。因此,您正在等待线程完成,从而阻止您启动任何其他线程。

join 背后的想法是在继续之前等待其他线程。在您的情况下,您想等待所有线程完成在主程序结束。否则,如果你不这样做,主程序就会结束,那么它创建的所有线程都会被杀死。所以通常,你应该在最后有一个循环,它连接所有创建的线程以防止主线程提前退出。

关于python - 何时、为何以及如何在 Python 中调用 thread.join()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21486105/

相关文章:

multithreading - ViewModel 和多线程最佳实践

python - 将时间范围转置为时间矩阵的最快方法

python - Bokeh 点击工具在垂直线上选择

c - posix 线程中的线程取消

multithreading - TLS 可变查找速度

java - 如何检查线程是否正在运行

Python C API : transfer dynamically allocated array to Python

python - 将带有 jsonb_each 的 Postgresql 查询转换为 sqlalchemy

python - 使用 minidom 在 xml 标签之间获取文本

java - java HashMap中的ConcurrentModificationException程序