join(),等待子執行緒執行完了,主線程才繼續往下執行,等所有執行緒執行完了,才退出程式。
當把子執行緒變成守護執行緒以後,只要主線程(非守護執行緒)執行完就退出程式,不管子執行緒完了沒完。
主線程沒法設定成守護執行緒。
#主線程啟動子執行緒之後,兩者是並行的,相互之間是獨立的。import threading,time
def run(n):
print('task',n)
time.sleep(2)
print('task done',threading.current_thread()) #列印當前執行緒是主線程還是子執行緒
start_time=time.time()
t_objs=
for i in range(10):
t=threading.thread(target=run,args=("t-%s"%i,))
t.setdaemon(true) #把當前執行緒設定為守護執行緒,一定要在start之前設定。
t.start()
print('----all threads has finished',threading.current_thread(),threading.active_count())
print("cost time is:",time.time()-start_time)
執行結果,沒有等待子執行緒(守護執行緒)的sleep的2s,而是直接結束了程式了。
沒有看到print('task done',threading.current_thread()) 的輸出,證明守護執行緒被強制關閉了。
task t-0task t-1
task t-2
task t-3
task t-4
task t-5
task t-6
task t-7
task t-8
task t-9
----all threads has finished <_mainthread(mainthread, started 11936)> 11
cost time is: 0.0010001659393310547
process finished with exit code 0
守護執行緒 與守護程序
守護執行緒 守護執行緒會等待所有非守護執行緒執行結束才結束 守護程序 無論子程序有沒有執行結束,當主程式的 執行完畢,都會結束 def f1 time.sleep 2 print 1號執行緒 def f2 time.sleep 3 print 2號執行緒 if name main t1 thread...
執行緒 守護執行緒與非守護執行緒
什麼是守護執行緒?非守護執行緒好理解,就是程式中前端執行的執行緒,我個人理解為常用於處理主動事務的執行緒。守護執行緒 顧名思義,用來守護處理事務的執行緒。它主要執行在程式後端,最有代表的例子gc執行緒,就是守護執行緒。守護執行緒的特點 實現守護執行緒,驗證非守護執行緒結束時,守護執行緒也中斷。cre...
python執行緒鎖 守護執行緒,程序鎖 守護程序
1 守護程序 1.1 什麼是守護程序?1 守護程序會在主程序 執行結束的情況下,立即結束。2 守護程序本身其實就是乙個子程序。3 主程序在其 結束後已經執行完畢 守護程序在此時就被 然後主程序會一直等非守護的子程序都執行完畢後 子程序的資源才會結束。1.2 為什麼要用守護程序?1 守護程序本身就是乙...