5.1.6 守护进程daemon

Posted beallaliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.1.6 守护进程daemon相关的知识,希望对你有一定的参考价值。

子进程设置为守护进程后,在主进程代码执行结束(而非进程退出)后,子进程就终止。

如果子进程没有设置为守护进程,那么主进程会等子进行结束才结束主进程。

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的主要内容,如果未能解决你的问题,请参考以下文章

守护进程VS守护线程

进程线程_daemon

php写守护进程(Daemon)

Daemon——守护进程

守护进程(Daemon)

守护进程(Daemon)