importthreadingimporttimedeft1_job():print('t1 start')for i in range(10):print('begin sleep 0.1s')
time.sleep(0.1)print('t1 finish')deft2_job():print('t2 start')print('t2 finish')defmain():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 停止了, 兩個子執行緒 並不會直接退出. 而是要把自己各自的任務完成, 才會退出.
不知道t1還是t2先執行,**裡寫的是t1開始, 但是列印出log是t2先開始, 這可能和執行緒執行的任務多少有關係吧(個人理解),具體原因可能就是多執行緒造成的.
這裡通過join ,可以讓執行緒在這裡等著,阻塞在這裡,等執行緒跑完了
join 有乙個引數 timeout 意思是等待時間, 如果超過等待的時間, 任務還沒有完成那就不等待了,直接繼續跑下面的**.
如果任務 完成的時候, 沒有超過等待時間, 那麼就正常往下跑.
timeout 是乙個float number 單位是秒
看下面的**測試, 使用join來等待執行緒:
python 多執行緒偽 多執行緒筆記 偽非同步IO
bio的時候,乙個客戶端對應伺服器的一條執行緒,比較耗執行緒資源.在此基礎上,對起執行緒進行優化,建立乙個執行緒池,對執行緒進行管理,可以設定乙個最大執行緒數 maxthreadcount.這樣,達到執行緒可控的目的.即使外面有遠大於執行緒數的連線過來,也不至於讓伺服器撐爆.多出的客戶端,就進入執行...
C thread偽多執行緒例子(C 多執行緒相關)
以下是單執行緒多執行緒分別處理資料,其中多執行緒有可能處理不了所有資料則程式會進入死迴圈,例子中假定work能處理完所有資料 上述多執行緒例子主線程和子執行緒鎖用得非常密集,乙個地方釋放鎖下個執行緒馬上又進行上鎖 好比乙個包子只能給一條狗吃,另外四條只能光看著。實際上只能換偽多執行緒,依然是單執行緒...
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...