python多線程中join的應(yīng)用場景
1、線程的join()方法表示等這個(gè)線程運(yùn)行完畢,程序再往下運(yùn)行。我們來看下面的例子
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è)線程都要運(yùn)行結(jié)束才能進(jìn)行下一次循環(huán),這樣就和沒有使用多線程沒有區(qū)別了。不過如果要計(jì)算多線程運(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秒都沒有等,就輸出了結(jié)果,而且5個(gè)2是在打印出這個(gè)之后才輸出出來的。這是因?yàn)閜rint(time.time()-t)是區(qū)別于那5次循環(huán)線程之外的第6個(gè)線程,它不會等待5個(gè)線程運(yùn)行結(jié)束就會開始運(yùn)行。所以這樣是無法獲得上面5個(gè)線程的運(yùn)行時(shí)間的,我們需要用join()等待5個(gè)線程都運(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)行依賴之前代碼運(yùn)行完成時(shí),就要加入join()命令。
以上就是python多線程中join的應(yīng)用場景,希望能對大家有所幫助。更多Python學(xué)習(xí)教程請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。