根据守护进程线程/进程的定义,它们不会阻止主线程/进程退出,而主线程/进程在其非守护进程退出之前不会退出。
如果是这种情况,为什么我们要关心在线程/进程上调用threading.join((方法或multiprocessing.join((方法。
我不确定我对线程和进程的假设是否是写入.如果不是,请指出我正确的方向。
感谢您的任何回答。
来自multiprocessing Programming Guidelines
.
加入僵尸进程
在Unix上,当一个进程完成但尚未加入时,它就变成了僵尸。不应该有很多,因为每次启动新进程(或调用 active_children(( 时(,所有尚未加入的已完成进程都将加入。同时调用已完成进程的Process.is_alive也将加入该进程。即便如此,显式加入您启动的所有进程也可能是一种很好的做法。
UNIX 操作系统要求显式"垃圾回收"过期的进程。忽略这一点会导致与不关闭文件时类似的问题。您将慢慢泄漏空的进程表,直到没有更多的可用表并且您的应用程序将崩溃。
不幸的是,multiprocessing
模块旨在重现threading
API,因此使用相同的术语,有时这令人困惑。UNIX 中的multiprocessing.Process.join
类似于低级 Cwait
函数。
如果不想阻止等待进程过期,可以通过将超时设置为 0 或使用join
multiprocessing.active_children
API 来定期轮询过期的进程。通常的做法是将daemon
标志设置为无论如何True
。