在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 對(duì)于python多層級(jí)子線程使用join不能阻塞的疑惑

對(duì)于python多層級(jí)子線程使用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,按理說是應(yīng)該阻塞.但運(yùn)行結(jié)果不是我預(yù)期的順序1111...,2222...,3333...
如果沒有子線程,也就是a函數(shù)里直接調(diào)用b的話,就是我預(yù)期的按順序的結(jié)果. 求解惑

回答
編輯回答
柚稚

我在自己的機(jī)器上測(cè)試正常,你用命令行跑一次試試。建議把輸出重定向到文件,方便查看。

python thread_test.py > output.txt
2018年2月10日 04:09
編輯回答
司令

我覺得沒什么問題,你仔細(xì)看看,這個(gè) t.join() 阻塞的是哪個(gè)線程,是 target=a 會(huì)等到a函數(shù)運(yùn)行結(jié)束。而 a 函數(shù)里另起了個(gè)線程b。這個(gè) t.join() 并不會(huì)阻塞 b 線程。如果你想 a 函數(shù)結(jié)束時(shí)也要 線程b結(jié)束,可以:

def a(i):
    t = threading.Thread(target=b, args=(i,))
    t.start()
    t.join()
2017年12月4日 15:11