並發編程(守護進程)
阿新 • • 發佈:2018-05-27
sta ldr 並發執行 一行 processes odin AR env 需要
一 守護進程
主進程創建子進程,然後將該進程設置成守護自己的進程
關於守護進程需要強調兩點:
其一:守護進程會在主進程代碼執行結束後就終止
其二:守護進程內無法再開啟子進程,否則拋出異常:AssertionError: daemonic processes are not allowed to have children
如果我們有兩個任務需要並發執行,那麽開一個主進程和一個子進程分別去執行就ok了,如果子進程的任務在主進程任務結束後就沒有存在的必要了,那麽該子進程應該在開啟前就被設置成守護進程。主進程代碼運行結束,守護進程隨即終止
#!/usr/bin/env python # -*- coding:utf-8 -*-from multiprocessing import Process import time def task(name): print(‘%s is piaoing‘ %name) time.sleep(3) print(‘%s is piao end‘ %name) if __name__ == ‘__main__‘: p=Process(target=task,args=(‘xiaojiu‘,)) p.daemon=True #一定要在p.start()前設置,設置p為守護進程,禁止p創建子進程,並且父進程代碼執行結束,p即終止運行 p.start()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-------
456
end456
因為 主進程死了, p1也就死了,
並發編程(守護進程)