不管是進程仍是線程,都遵循:守護xx會等待主xx運行完畢後被銷燬。須要強調的是:運行完畢並不是終止運行。python
重點:守護線程守護的的是進程的運行週期,只要程序中全部非守護線程都結束後,守護線程才結束線程
from threading import Thread import time def sayhi(name): time.sleep(2) print('%s say hello' %name) if __name__ == '__main__': t=Thread(target=sayhi,args=('nick',)) t.setDaemon(True) #必須在t.start()以前設置 t.start() print('主線程') print(t.is_alive())
主線程
Truecode
from threading import Thread,enumerate,currentThread import time def task(): print('守護線程開始') print(currentThread()) time.sleep(20) print('守護線程結束') def task2(): print('子線程 start') time.sleep(5) print(enumerate()) print('子線程 end') if __name__ == '__main__': t1 = Thread(target=task) t2 = Thread(target=task2) t1.daemon = True t2.start() t1.start() print('主')
子線程 start
守護線程開始
主
<Thread(Thread-1, started daemon 4360)>
[<_MainThread(MainThread, stopped 15104)>, <Thread(Thread-2, started 15160)>, <Thread(Thread-1, started daemon 4360)>]
子線程 end進程