Python程式中的執行緒操作-守護執行緒
阿新 • • 發佈:2020-12-26
無論是程序還是執行緒,都遵循:守護XX會等待主XX執行完畢後銷燬。
需要強調的是:執行完畢並非終止執行。
對主程序來說,執行完畢指的是主程序程式碼執行完畢
對主執行緒來說,執行完畢指的是主執行緒所在的程序內所有非守護執行緒統統執行完畢,主執行緒才算執行完畢。
1.1詳細解釋
主程序在其程式碼結束後就已經算執行完畢了(守護程序在此就被回收),然後主程序會一直等非守護的子程序都執行完畢後回收子程序的資源(否則會產生殭屍程序),才會結束。
主執行緒在其他非守護執行緒執行完畢後才算執行完畢(守護執行緒在此時就被回收)。因為主執行緒的結束意味著程序的結束,程序整體的資源都將被回收,而程序必須保證非守護執行緒都執行完畢後才能結束。
1.2守護執行緒例1
等待所有子執行緒結束
fromoutputsthreading 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())
macname@MacdeMacBook-Pro py % python3 cccccc.py 主執行緒 True macname@MacdeMacBook-Pro py %
等待所有子執行緒結束
from threading import Thread import time def foo(): print(123) time.sleep(1) print("end123") def bar(): print(456) time.sleep(3) print("end456") t1 = Thread(target=foo) t2 = Thread(target=bar) t1.daemon = True t1.start() t2.start() print(outputs"main-------")
macname@MacdeMacBook-Pro py % python3 cccccc.py 123 456 main------- end123 end456 macname@MacdeMacBook-Pro py %