python多線(xiàn)程中join的應(yīng)用場(chǎng)景
1、線(xiàn)程的join()方法表示等這個(gè)線(xiàn)程運(yùn)行完畢,程序再往下運(yùn)行。我們來(lái)看下面的例子
fromthreadingimportThread
t=time.time()
for_inrange(5):
th=Thread(target=myfun)
th.start()
th.join()print(time.time()-t)
#結(jié)果為5.0047078132629395秒
2、這里start()之后馬上join(),表示每一個(gè)線(xiàn)程都要運(yùn)行結(jié)束才能進(jìn)行下一次循環(huán),這樣就和沒(méi)有使用多線(xiàn)程沒(méi)有區(qū)別了。不過(guò)如果要計(jì)算多線(xiàn)程運(yùn)行時(shí)間卻是要用到這個(gè)join()
我們先看一下不用join()的情況
fromthreadingimportThread
t=time.time()
for_inrange(5):
th=Thread(target=myfun)
th.start()print(time.time()-t)
#結(jié)果為0.0009980201721191406秒
3、它連1秒都沒(méi)有等,就輸出了結(jié)果,而且5個(gè)2是在打印出這個(gè)之后才輸出出來(lái)的。這是因?yàn)閜rint(time.time()-t)是區(qū)別于那5次循環(huán)線(xiàn)程之外的第6個(gè)線(xiàn)程,它不會(huì)等待5個(gè)線(xiàn)程運(yùn)行結(jié)束就會(huì)開(kāi)始運(yùn)行。所以這樣是無(wú)法獲得上面5個(gè)線(xiàn)程的運(yùn)行時(shí)間的,我們需要用join()等待5個(gè)線(xiàn)程都運(yùn)行結(jié)束。
代碼如下
fromthreadingimportThread
t=time.time()ths=[]
for_inrange(5):
th=Thread(target=myfun)
th.start()
ths.append(th)forthinths:
th.join()print(time.time()-t
#結(jié)果為1.0038363933563232
join()不只是用于這種情形。當(dāng)一步代碼運(yùn)行依賴(lài)之前代碼運(yùn)行完成時(shí),就要加入join()命令。
以上就是python多線(xiàn)程中join的應(yīng)用場(chǎng)景,希望能對(duì)大家有所幫助。更多Python學(xué)習(xí)教程請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。