線程與進程3-守護線程
阿新 • • 發佈:2017-08-11
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-守護線程