守護程序(瞭解)
阿新 • • 發佈:2018-12-16
守護程序
主程序建立子程序,然後將該程序設定成守護自己的程序,守護程序伴隨著子程序的結束而結束。
如果我們有兩個任務需要併發執行,那麼開一個主程序和一個子程序分別去執行就ok了,如果子程序的任務在主程序任務結束後就沒有存在的必要了,那麼該子程序應該在開啟前就被設定成守護程序。主程序程式碼執行結束,守護程序隨即終止
關於守護程序需要強調兩點:
其一:守護程序會在主程序程式碼執行結束後就終止
其二:守護程序內無法再開啟子程序,否則丟擲異常:AssertionError: daemonic processes are not allowed to have children
from multiprocessing import Process import time def task(name): print("%s is running" % name) time.sleep(2) # p = Process(target=time.sleep, args=(3,)) # 守護程序不能再有子程序 # p.start() if __name__ == "__main__": p = Process(target=task, args=("子程序1", )) p.daemon = True # 守護程序 一定要在p.start()前設定,設定p為守護程序,禁止p建立子程序,並且父程序程式碼執行結束,p即終止執行 p.start() p.join() print("主") # 只要終端打印出這一行內容,那麼守護程序p也就跟著結束掉了
練習題
思考下列程式碼的執行結果有可能有哪些情況?為什麼?
from multiprocessing import Process import time def foo(): print(123) time.sleep(1) print("end123") def bar(): print(456) time.sleep(3) print("end456") if __name__ == '__main__': p1=Process(target=foo) p2=Process(target=bar) p1.daemon=True p1.start() p2.start() print("main-------")
main------- # 這一行打印出,說明主程序執行完。p1就立馬死了,可能會有123列印 456 end456