執行緒join,daemon關係

2021-08-07 23:19:35 字數 1317 閱讀 3455

1 python 預設引數建立執行緒後,不管主線程是否執行完畢,==都會等待子執行緒執行完畢才一起退出==,有無join結果一樣

2 ==如果建立執行緒==,並且設定了daemon為true,即thread.setdaemon(true), 則主線程執行完畢後自動退出,不會等待子執行緒的執行結果。而且隨著==主線程退出,子執行緒也消亡。==

3 join方法的作用是阻塞,等待子執行緒結束,join方法有乙個引數是==timeout==,即如果主線程等待timeout,子執行緒還沒有結束,則==主線程強制結束子執行緒==。

4 如果執行緒daemon屬性為false, 則join裡的timeout引數無效。==主線程會一直等待子執行緒結束==。

5 如果執行緒daemon屬性為true, 則join裡的timeout引數是有效的, 主線程會等待timeout時間後,結束子執行緒。此處有乙個坑,即如果同時有n個子執行緒join(timeout),那麼實際上主線程會等待的超時時間最長為 n timeout, 因為每個子執行緒的超時開始時刻是上乙個子執行緒超時結束的時刻。

執行緒

true

false

default

預設情況會等待子執行緒執行完畢才會退出

join

(daemon=true)join有乙個引數timeout。到時間沒執行完,主線程強制結束子執行緒,沒有timeout,主線程執行完畢後強制關閉子執行緒

(daemon=false)timout引數無效,主線程一直等待子執行緒結束

import threading, time

defdothreadtest

(): print('start thread time:', time.strftime('%h:%m:%s'))

print('我第三執行')

time.sleep(10)

print('stop thread time:', time.strftime('%h:%m:%s'))

threads =

for i in range(3):

thread1 = threading.thread(target=dothreadtest)

thread1.setdaemon(true)

print("我最先執行")

for t in threads:

print("我第二執行")

t.start()

for t in threads:

t.join(1)

print("我最後執行")

print('stop main thread')

c 執行緒 執行緒池和Task關係

環境 執行緒 thread,由clr提供,可以提供細粒度的執行緒控制,但是在返回值 多個執行緒並行 序列時候顯得功能不足,需要進一步封裝才行,而且執行緒的開啟 停止都需要時間開銷,亂用的話還造成浪費。執行緒池 threadpool,由clr提供,提供粗粒度的執行緒控制,主要用來執行短時間內執行的 片...

APUE 執行緒 主線程與子執行緒的關係

include include include include include void pthread prc void arg int main int argc,char argv printf i am main n 執行的結果為 i am main 1 當主線程結束時,整個程序都會結束 子...

程序和執行緒的關係

程序是系統資源管理的最小單位,執行緒是程式執行的最小單位。執行緒和程序十分相似,不同的只是執行緒比程序小。首先,執行緒採用了多個執行緒可共享資源的設計思想。例如,它們的操作大部分都是在同一位址空間進行的。其次,從乙個執行緒切換到另一線程所花費的代價比程序低。再次,程序本身的資訊在記憶體中占用的空間比...