7、第七周-網絡編程-守護進程
阿新 • • 發佈:2018-04-07
tar 直接 imp 網絡 python strong pri 這樣的 body
如果你設置一個線程為守護線程,,就表示你在說這個線程是不重要的,在進程退出的時候,不用等待這個線程退出。
守護進程:設置一個線程是守護線程,就說明這不是一個很重要的線程,對於這樣的線程,只要主線程運行結束,就會直接退出。而如果一個線程不是守護線程的話,即使主線程運行結束也不會退出,而是等待所有的非守護線程運行結束,再退出。。簡單概念:守護線程主線掛了,子線程會掛掉。非守護線程,主線程掛掉,子線程還會繼續繼續。
舉例:
A、守護進程:
import threading,time def _demon(): for i in range(1,5): print(i) time.sleep(2) t = threading.Thread(target=_demon) t.setDaemon(True) #把線程設置為守護進程,要放在start前面執行 t.start() print("end the process") 輸出: 1 end the process
B、非守護進程:
import threading,time def _demon(): for i in range(1,5): print(i) time.sleep(2) t = threading.Thread(target=_demon) t.setDaemon(False) t.start() print("end the process") 輸出: 1 end the process 2 3 4
註:默認就是非守護進程,要設置進程為主進程,就要手動開啟。
如果你設置一個線程為守護線程,,就表示你在說這個線程是不重要的,在進程退出的時候,不用等待這個線程退出。
如果你的主線程在退出的時候,不用等待那些子線程完成,那就設置這些線程的daemon屬性。即,在線程開始(thread.start())之前,調用setDeamon()函數,設定線程的daemon標誌。(thread.setDaemon(True))就表示這個線程“不重要”。
如果你想等待子線程完成再退出,那就什麽都不用做。,或者顯示地調用thread.setDaemon(False),設置daemon的值為false。新的子線程會繼承父線程的daemon標誌。整個Python會在所有的非守護線程退出後才會結束,即進程中沒有非守護線程存在的時候才結束。
7、第七周-網絡編程-守護進程