join( ) 阻塞主線程
join() 作用為阻塞主線程,即在子線程未返回的時候,主線程等待其返回然后再繼續執行
join不能與start在循環里連用
以下為錯誤代碼,代碼創建了5個線程,然后用一個循環激活線程,激活之后令其阻塞主線程
threads = [Thread() for i in range(5)]
for thread in threads:
thread.start()
thread.join()
1
2
3
4
執行過程:
1. 第一次循環中,主線程通過start函數激活線程1,線程1進行計算
2. 由於start函數不阻塞主線程,在線程1進行運算的同時,主線程向下執行join函數
3. 執行join之后,主線程被線程1阻塞,在線程1返回結果之前,主線程無法執行下一輪循環
4. 線程1計算完成之后,解除對主線程的阻塞
5. 主線程進入下一輪循環,激活線程2並被其阻塞
如此往復,可以看出,本來應該並發的五個線程,在這里變成了順序隊列,效率和單線程無異
join的正確用法:使用兩個循環分別處理start和join函數,即可實現並發
threads = [Thread() for i in range(5)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
---------------------
作者:brucewong0516
來源:CSDN
原文:https://blog.csdn.net/brucewong0516/article/details/81050792
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!