5.1.6 守護進程daemon
阿新 • • 發佈:2018-06-16
無法 sta all lose opened close args st2 join
子進程設置為守護進程後,在主進程代碼執行結束(而非進程退出)後,子進程就終止。
如果子進程沒有設置為守護進程,那麽主進程會等子進行結束才結束主進程。
1. 守護進程的設置必須在start前設置。
2. 守護進程無法再開啟子進程。
from multiprocessing import Process import time def work(n): time.sleep(n) print(‘守護進程。。。。。‘) if __name__ == ‘__main__‘: p = Process(target=work, args=(3,)) p.daemon= True p.start() # p.join() print(‘主進程內‘) # 輸出結果: # 主進程內 # 說明:子進程都沒有執行到,因為主進程已經結束。
驗證守護進程無法再開啟子進程:
from multiprocessing import Process import time def work(n): time.sleep(n) print(‘守護進程。。。。。‘) pp1 = Process(target=time.sleep, args=(3,)) pp1.start() if __name__== ‘__main__‘: p = Process(target=work, args=(3,)) p.daemon = True p.start() p.join() print(‘主進程內‘) # 輸出結果: # 主進程內 # 說明:子進程都沒有執行到,因為主進程已經結束。
輸出結果:
報錯:
AssertionError: daemonic processes are not allowed to have children 守護進程不能有子進程
守護進程。。。。。 Process Process-1: Traceback (most recent call last): File"/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap self.run() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/process.py", line 93, in run self._target(*self._args, **self._kwargs) File "/data/bealla/work/luffy/projects/zuoye/network/test2.py", line 9, in work pp1.start() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/process.py", line 103, in start ‘daemonic processes are not allowed to have children‘ AssertionError: daemonic processes are not allowed to have children 主進程內
守護進程練習題:
守護進程在主進程代碼執行完畢後就終止。
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
View Code
5.1.6 守護進程daemon