- 那么如果有一天我们的需求是我的主进程结束了,由我主进程创建的那些子进程必须跟着结束,怎么办?守护进程就来了!
- 主进程创建守护进程后:
- 其一:守护进程会在主进程代码执行结束后就终止
- 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children
- 语法:
- 注意:主进程代码运行结束,守护进程随即终止
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:守护进程可以守护其他子进程么?