守护进程

守护进程(Daemon Process)是在后台运行的一种特殊类型的进程,它不会受到终端控制和交互的影响。守护进程通常用于执行一些系统级的任务或服务,比如网络服务、定时任务等。

'''

1. 创建守护进程:
    1. 在Python中,可以通过multiprocessing模块来创建守护进程。使用multiprocessing.Process创建子进程,并将daemon参数设置为True来指定该进程为守护进程。
    2. 在主进程退出时,守护进程会自动终止,无需手动处理。

2. 最佳实践:
    1. 在创建守护进程之前,首先完成所有必要的初始化工作,包括日志配置、打开文件、建立网络连接等。
    2. 为了避免守护进程无法正常退出,可以注册信号处理程序来处理各种终止信号,如SIGTERM、SIGINT等,执行清理操作并正确退出。

3. 坑:
    1. 守护进程不能产生孙子进程。如果守护进程创建了子进程,那么子进程也必须在调用start()方法之前将daemon设置为True。否则,子进程将变成孤儿进程,而守护进程退出后,子进程将由init进程接管。
    2. 守护进程中的print语句不会输出到终端,因为守护进程在后台运行,无法访问终端。可以使用日志记录工具来替代打印。
'''
import multiprocessing
import time


def daemon_work():
    while True:
        print("Daemon process is running...")
        time.sleep(1)


if __name__ == '__main__':
    daemon_process = multiprocessing.Process(target=daemon_work)
    daemon_process.daemon = True  # 设置守护进程
    daemon_process.start()

    # 主进程执行其他操作...
    time.sleep(5)

    print("Main process is exiting...")  # 主进程不会在等待子进程结束了(因为只有1个子进程并且是守护进程),而主进程结束后,子进程也会结束

'''
输出:
    Daemon process is running...
    Daemon process is running...
    Daemon process is running...
    Daemon process is running...
    Daemon process is running...
    Main process is exiting...
'''

 

posted @ 2023-07-23 19:02  Allen_Hao  阅读(71)  评论(0)    收藏  举报