Java教程

守护进程

本文主要是介绍守护进程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • 那么如果有一天我们的需求是我的主进程结束了,由我主进程创建的那些子进程必须跟着结束,怎么办?守护进程就来了!
  • 主进程创建守护进程后:
    • 其一:守护进程会在主进程代码执行结束后就终止
    • 其二:守护进程内无法再开启子进程,否则抛出异常: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:守护进程可以守护其他子进程么?
    • 答:不可以,守护进程只能守护主进程。
这篇关于守护进程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!