首页 > 解决方案 > 在完成 main 方法之前终止所有进程

问题描述

我为一些日志记录任务运行了一个单独的进程,与我的主进程并行。他们共享一些资源,我遇到了在主进程完成之前终止日志记录进程的问题。

完成主要 Python 程序并保留子进程有什么缺点吗?我可以确定它会在退出主程序时终止吗?Process.terminate()或者在主脚本中作为我最后一次调用会更好吗?

标签: pythonmultiprocessingpython-multiprocessing

解决方案


只要您正在启动的进程是daemons主进程将在退出之前自动终止它们

daemon

进程的守护进程标志,一个布尔值。这必须在调用 start() 之前设置。

初始值是从创建过程中继承的。

当一个进程退出时,它会尝试终止其所有的守护子进程。

请注意,不允许守护进程创建子进程。否则,如果守护进程在其父进程退出时被终止,它将使其子进程成为孤儿。此外,这些不是 Unix 守护进程或服务,它们是正常进程,如果非守护进程退出,它们将被终止(而不是加入)。

该标志是为由 a 创建的进程自动设置的multiprocessing.Pool,但默认falseProcess对象。父进程将尝试调用join所有非守护进程的子进程,因此如果您有任何正在运行的子进程,它们将阻止父进程退出,直到它们自己退出。


推荐阅读