7.2.4 - 並發多線程 守護進程
阿新 • • 發佈:2018-03-05
error ssi 強調 應該 child ren range print 自己的
一 守護進程
主進程創建子進程,然後將該進程設置成守護自己的進程。
關於守護進程需要強調兩點:
其一:守護進程會在主進程代碼執行結束後就終止
其二:守護進程內無法再開啟子進程,否則拋出異常:AssertionError: daemonic processes are not allowed to have children
如果我們有兩個任務需要並發執行,那麽開一個主進程和一個子進程分別去執行就ok了,如果子進程的任務在主進程任務結束後就沒有存在的必要了,那麽該子進程應該在開啟前就被設置成守護進程。主進程代碼運行結束,守護進程隨即終止
1. 沒開守護進程的代碼
from multiprocessing importProcess import time import random def task(name): print(‘%s is running‘ %name) time.sleep(random.randrange(1,3)) print(‘%s is running end‘ %name) if __name__ == ‘__main__‘: p=Process(target=task,args=(‘cmz‘,)) # p.daemon=True # 一定要在p.start()前設置,設置p為守護進程,禁止p創建子進程,並且父進程代碼執行結束,p即終止運行p.start() print(‘主‘) # 只要終端打印出這一行內容,那麽守護進程p也就跟著結束掉了
運行結果
主 cmz is running cmz is running end
2. 開守護進程的代碼
from multiprocessing import Process import time import random def task(name): print(‘%s is running‘ %name) time.sleep(random.randrange(1,3)) print(‘%s is running end‘ %name) if __name__ == ‘__main__‘: p=Process(target=task,args=(‘cmz‘,)) p.daemon=True # 一定要在p.start()前設置,設置p為守護進程,禁止p創建子進程,並且父進程代碼執行結束,p即終止運行 p.start() print(‘主‘) # 只要終端打印出這一行內容,那麽守護進程p也就跟著結束掉了
7.2.4 - 並發多線程 守護進程