守护进程

  • 那么如果有一天我们的需求是我的主进程结束了,由我主进程创建的那些子进程必须跟着结束,怎么办?守护进程就来了!
  • 主进程创建守护进程后:
    • 其一:守护进程会在主进程代码执行结束后就终止
    • 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children
  • 语法:
    • 子进程对象.daemon = True
  • 注意:主进程代码运行结束,守护进程随即终止
import time from multiprocessing import Process  def son1():     while True:         print('--> in son1')         time.sleep(1)  def son2():   # 执行10s     for i in range(10):         print('in son2')         time.sleep(1)  if __name__ == '__main__':    # 3s     p1 = Process(target=son1)     p1.daemon = True    # 表示设置p1是一个守护进程     p1.start()     p2 = Process(target=son2,)     p2.start()     time.sleep(3)     print('in main')  # 主进程会等待所有的子进程结束,是为了回收子进程的资源 # 守护进程会等待主进程的代码执行结束之后再结束,而不是等待整个主进程结束. # 主进程的代码什么时候结束,守护进程就什么时候结束,和其他子进程的执行进度无关 
  • 要知道的两个问题:
  • 1:为什么守护线程不能在主进程结束后再结束?
    • 答:因为主进程要对守护进程结束后的资源进行回收,所有守护进程必须在主进程结束之前就结束。因此守护进程选择在主进程的代码执行结束这个节点结束自己。
  • 2:守护进程可以守护其他子进程么?
    • 答:不可以,守护进程只能守护主进程。