Python 守护进程线程是否在后台运行?

Python 守护进程线程是否在后台运行?,python,multithreading,Python,Multithreading,我对python中的守护进程和非守护进程线程感到非常困惑。我读到当Python中的主线程退出时,非守护进程线程退出 但是我在Java中读到后台线程运行 我已经读了很多关于stackoverflow的不同讨论,关于守护进程和非守护进程线程,但我仍然感到困惑 你能澄清一下哪一个线程可以在后台使用Python运行吗?我认为你可能混淆了线程和进程。线程和进程都提供并发执行序列,正如您所说,一个在后台运行,另一个在后台执行。它们之间的一个主要区别是线程有共享内存,而进程没有 您提到的问题涉及UNIX守护进

我对python中的
守护进程
非守护进程
线程感到非常困惑。我读到当Python中的
主线程退出时,
非守护进程
线程退出

但是我在
Java
中读到后台线程运行

我已经读了很多关于stackoverflow的不同讨论,关于
守护进程
非守护进程
线程,但我仍然感到困惑


你能澄清一下哪一个线程可以在后台使用Python运行吗?

我认为你可能混淆了线程和进程。线程和进程都提供并发执行序列,正如您所说,一个在后台运行,另一个在后台执行。它们之间的一个主要区别是线程有共享内存,而进程没有

您提到的问题涉及UNIX守护进程,这些进程通常是后台进程,如
sshd
或其他。这些线程与守护进程线程有点不同

类似地,在Python和java中,守护进程线程是不会阻止整个程序退出的线程。当所有非守护进程线程完成运行时,守护进程线程将停止(可能会突然停止)

TL;DR守护进程线程和非守护进程线程都将在Python中独立并发执行(某种程度上,请确保您理解),不确定您的用例是什么,但我认为非守护进程线程更常见,并且可能是您想要的。

尝试以下方法:

import threading
help(threading.Thread)
然后向下滚动到数据描述符的文档,特别是“daemon”标志。在那里,您可以找到以下信息:

daemon
   A boolean value indicating whether this thread is a daemon thread.

   This must be set before start() is called, otherwise RuntimeError is
   raised. Its initial value is inherited from the creating thread; the
   main thread is not a daemon thread and therefore all threads created in
   the main thread default to daemon = False.

   The entire Python program exits when no alive non-daemon threads are
   left.

特别是最后一句话很重要,因为你所有的问题都是由这句话含蓄地回答的。还请注意,这与您的第一个声明“主线程退出时非守护进程线程退出”相矛盾。另外,其他语言的行为也不同,例如,您对Java的引用可能是正确的,但对解释Python行为毫无用处。查看文档,Java使用的术语“守护线程”似乎与Python完全相同。

考虑到我有一个非守护线程正在执行一项繁重的操作,因此我强制停止程序,这样非守护线程也将终止??如果终止进程,该进程中的所有内容都将终止,包括任何Python线程,考虑到我在Python中有一个非守护进程线程,它正在进行一个繁重的操作,所以我强制停止我的程序,所以非守护进程线程也会终止。如果终止进程,进程中的每一个都被终止,包括任何Python线程,DyMon或不。终止一个程序是一个操作系统级的操作,在该进程中运行的Python的内部操作当然也会受到影响。Thanksss@Ulrich您现在清除了我的所有概念,您应该将其添加到您的答案中,以便我接受:)谢谢您现在我明白了,请包含在您的答案中,以便我可以接受:)