<dfn id='stoh93D1'></dfn>

        <noscript id='stoh93D1'></noscript>

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

        0 0 python
        汉有游女,不可求思。
        2019-02-21 11:04:28 提问

        关注 0关注

        收藏 0收藏, 34浏览

        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声望 2019-02-21 16:02

          我在自己的机器上测试正常,你用命令行跑一次试试。建议把输出重定向到文件,方便查看。 python thread_test.py > output.txt
          请先 登录 后评论
        • java_大星星133声望 2019-02-21 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
        • 输入数值
        发布追问