1. 程式人生 > >線程與進程3-守護線程

線程與進程3-守護線程

import task 線程 print reads cost code brush span

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() t_objs.append(t) 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-0
task 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

線程與進程3-守護線程