python 之多線程join()


join()其實就是阻塞線程,控制線程的執行,從而控制住代碼的執行順序。

參照這篇文章:python3對多線程join的理解

通常都是,線程join()后,順序執行join()后面的代碼,如下面的例子:

def main():
    print('---main begin----')
    t1 = threading.Thread(target=T1_job, name='T1')
    t2 = threading.Thread(target=T2_job, name='T2')
    t1.start()
    t2.start()

    t2.join()
    print("t2 done")

    t1.join()
    print("t1 done")

    print('---main end----')
--------------------- 
作者:阿常囈語 
來源:CSDN 
原文:https://blog.csdn.net/u010339879/article/details/86506450 
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 t1和t2的開始順序由系統決定,誰都可能先開始執行,如代碼,t2.join(),print("t2 done")在先,而t1.join() print("t1 done")在后,則按照代碼順序,一定是print("t2 done")先執行,而 print("t1 done")后執行。當然這里在沒有設定線程的等待時間timeout時,應該是按照線程運行完畢后在執行下一行代碼。即t2運行完了,執行print("t2 done"),接着等t1執行完畢, print("t1 done")執行,最后print('---main end----')執行。可見,join()其實就是阻塞線程,控制代碼的執行順序的。當然,線程在執行時是並發的,只不過是他們的結束是按照join()的順序來控制的。運行結果如下:

---main begin----
T1 start
begin sleep 0.1s
T2 start
T2 finish
t2 done
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
T1 finish
t1 done
---main end----

--------------------- 
作者:阿常囈語 
來源:CSDN 
原文:https://blog.csdn.net/u010339879/article/details/86506450 
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

  



 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com