1. 程式人生 > >7.2.4 - 並發多線程 守護進程

7.2.4 - 並發多線程 守護進程

error ssi 強調 應該 child ren range print 自己的

一 守護進程

主進程創建子進程,然後將該進程設置成守護自己的進程。

關於守護進程需要強調兩點:

其一:守護進程會在主進程代碼執行結束後就終止

其二:守護進程內無法再開啟子進程,否則拋出異常:AssertionError: daemonic processes are not allowed to have children

如果我們有兩個任務需要並發執行,那麽開一個主進程和一個子進程分別去執行就ok了,如果子進程的任務在主進程任務結束後就沒有存在的必要了,那麽該子進程應該在開啟前就被設置成守護進程。主進程代碼運行結束,守護進程隨即終止

1. 沒開守護進程的代碼

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也就跟著結束掉了

運行結果

主
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 - 並發多線程 守護進程