對于python多層級子線程使用join不能阻塞的疑惑

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

關注 0關注

收藏 0收藏, 8225瀏覽

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
  • 輸入數值
發布追問
重庆快乐十分开奖记录