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

0 0 python
汉有游女,不可求思。
2018-10-18 11:04:28 提问

关注 0关注

收藏 0收藏, 36浏览

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个回答

  • 豌豆の豆98声望 2018-10-15 16:02

    我在自己的机器上测试正常,你用命令行跑一次试试。建议把输出重定向到文件,方便查看。 python thread_test.py > output.txt
    请先 登录 后评论
  • java_大星星133声望 2018-10-15 16:02

    我觉得没什么问题,你仔细看看,这个 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()
    请先 登录 后评论

注册新账号

悬赏追问
10
  • 10
  • 20
  • 50
  • 100
  • 200
  • 输入数值
发布追问
XML 地图 | Sitemap 地图