对于python多层级子线程使用join不能阻塞的疑惑

def a(i):
    t = threading.Thread(target=b, args=(i,))
    t.start()
def b(i):
    for j in range(100):
        print i


if __name__ == '__main__':
    for i in range(100):
        t = threading.Thread(target=a, args=(i,))
        t.start()
        t.join()

图片描述

代码如上, 加了join,按理说是应该阻塞.但运行结果不是我预期的顺序1111...,2222...,3333...
如果没有子线程,也就是a函数里直接调用b的话,就是我预期的按顺序的结果. 求解惑

阅读 2.3k
2 个回答

我在自己的机器上测试正常,你用命令行跑一次试试。建议把输出重定向到文件,方便查看。

python thread_test.py > output.txt

我觉得没什么问题,你仔细看看,这个 t.join() 阻塞的是哪个线程,是 target=a 会等到a函数运行结束。而 a 函数里另起了个线程b。这个 t.join() 并不会阻塞 b 线程。如果你想 a 函数结束时也要 线程b结束,可以:

def a(i):
    t = threading.Thread(target=b, args=(i,))
    t.start()
    t.join()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题