Daemon threads vs daemon processes in Python



根据 Python 文档,守护进程线程是一旦主线程死亡就会死亡的线程。这似乎是守护进程的完全相反的行为,它涉及创建子进程并终止父进程以使 init 接管子进程(即杀死父进程不会杀死子进程)。

那么为什么守护进程线程会在父线程死亡时死亡,这是用词不当吗?我认为"守护进程"线程会在主进程终止继续运行。

它只是名称在不同的上下文中意味着不同的东西。

如果您不知道,例如threading.Threadmultiprocessing.Process也可以标记为"守护进程"。你对"守护进程"的描述适合Unix守护进程,而不是Python的守护进程。

文档还有一个关于Process.daemon的部分:

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

Python的守护进程和Unix守护进程(或Windows"服务")之间的唯一共同点是,您可以将它们用于后台任务。 (对于 Python:不过,对于在关闭时不需要适当清理的任务,只有一个选项)。

Python在操作系统线程和进程之上强加了自己的抽象层。ThreadProcess的守护进程属性是关于这个独立于操作系统的、Python 级抽象的

。 在 Python 级别,守护进程是当主线程退出时不加入(等待自愿退出)的线程,而守护进程是在父进程退出时终止(未加入)的进程。守护进程线程和进程都经历相同的行为,因为在主进程或父进程关闭时不会等待它们的自然退出。就这样。

请注意,Windows甚至没有像Unix那样的"相关进程"的概念,但Python以跨平台的方式实现了"子"和"父"的这种关系。

我认为"守护程序"线程会在主线程之后继续运行 进程已终止。

线程不能存在于进程之外。进程始终承载并为至少一个线程提供上下文。

相关内容

  • 没有找到相关文章

最新更新