python3對多線程處理

參考博客: https://blog.csdn.net/u010339879/article/details/86506450html

http://www.javashuo.com/article/p-quspxypb-kq.htmlpython

python線程介紹官網: https://docs.python.org/3/library/threading.html?highlight=threading#編程

python編程語言裏面的任務和線程是很重要的一個功能, 這裏面涉及到不少的東西, 具體能夠查看上面我參考的博客地址,多線程

這裏只寫出我我的對python多線程的理解.編程語言

先看下面的代碼(摘抄其餘博客, 同時本身在真實環境運行(我用的是python3.7.3版本)):測試

import threading
import time

def T1_job():
    print('T1 start')
    for i in range(10):
        print('begin sleep 0.1s')
        time.sleep(0.1)
    print('T1 finish')

def T2_job():
    print('T2 start')
    print('T2 finish')

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()
    print('---main end----')

if __name__ == '__main__':
    main()

運行結果以下:
---main begin----
---main end----
T2 start
T1 start
begin sleep 0.1s
T2 finish
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

主線程,main 很快就結束了, 子線程 T2先開始,而後 T1開始, T2很快就完成任務了, 而後通過漫長的等待最後也完成任務了. 這是沒有用join 的狀況. 即便 主線程main 中止了, 兩個子線程 並不會直接退出. 而是要把本身各自的任務完成, 纔會退出.spa

不知道T1仍是T2先運行,代碼裏寫的是T1開始, 可是打印出Log是T2先開始, 這可能和線程執行的任務多少有關係吧(我的理解),具體緣由可能就是多線程形成的. .net

這裏經過join ,可讓線程在這裏等着,阻塞在這裏,等線程跑完了線程

join 有一個參數 timeout 意思是等待時間, 若是超過等待的時間, 任務尚未完成那就不等待了,直接繼續跑下面的代碼.
若是任務 完成的時候, 沒有超過等待時間, 那麼就正常往下跑.code

timeout 是一個float number 單位是秒

看下面的代碼測試, 使用join來等待線程:

import threading
import time

def T1_job():
    print('T1 start')
    for i in range(10):
        print('begin sleep 0.5s')
        time.sleep(0.5)
    print('T1 finish')

def T2_job():
    print('T2 start')
    print('T2 finish')

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()

    t1.join(timeout=3)
    print("t1 done")

    t2.join()
    print("t2 done")
    print('---main end----')
運行結果以下:
---main begin----
T1 start
begin sleep 0.5s
T2 start
T2 finish
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
t1 done     # t1 繼續往下跑
t2 done
---main end----
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
T1 finish
相關文章
相關標籤/搜索