为什么我们必须在 Python 中的非守护进程上使用 join 方法



根据守护进程线程/进程的定义,它们不会阻止主线程/进程退出,而主线程/进程在其非守护进程退出之前不会退出。

如果是这种情况,为什么我们要关心在线程/进程上调用threading.join((方法或multiprocessing.join((方法。

我不确定我对线程和进程的假设是否是写入.如果不是,请指出我正确的方向。

感谢您的任何回答。

来自multiprocessing Programming Guidelines.

加入僵尸进程

在Unix上,当一个进程完成但尚未加入时,它就变成了僵尸。不应该有很多,因为每次启动新进程(或调用 active_children(( 时(,所有尚未加入的已完成进程都将加入。同时调用已完成进程的Process.is_alive也将加入该进程。即便如此,显式加入您启动的所有进程也可能是一种很好的做法。

UNIX 操作系统要求显式"垃圾回收"过期的进程。忽略这一点会导致与不关闭文件时类似的问题。您将慢慢泄漏空的进程表,直到没有更多的可用表并且您的应用程序将崩溃。

不幸的是,multiprocessing模块旨在重现threadingAPI,因此使用相同的术语,有时这令人困惑。UNIX 中的multiprocessing.Process.join类似于低级 Cwait函数。

如果不想阻止等待进程过期,可以通过将超时设置为 0 或使用joinmultiprocessing.active_childrenAPI 来定期轮询过期的进程。通常的做法是将daemon标志设置为无论如何True

最新更新