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