Python:线程何时终止?不(立即)返回

Python:线程何时终止?不(立即)返回,python,multithreading,python-multithreading,Python,Multithreading,Python Multithreading,我正在使用一个threading.Thread()来完成它的工作并返回s。 它的返回记录在一份打印声明中,因此我确信 这种情况经常发生。但是,依靠threading.active\u count()和threading.enumerate()线程将保持活动状态 除了从主线程连接线程之外,还有 可以从线程内部执行的任何其他操作 安全终止?线程化模块维护已启动但尚未连接的线程列表。它称之为“活动”列表,但实际上是“尚未加入”列表。当程序终止时,线程模块将对列表中剩余的任何内容进行连接。这允许您执行延

我正在使用一个
threading.Thread()
来完成它的工作并返回
s。
它的返回记录在一份打印声明中,因此我确信
这种情况经常发生。但是,依靠
threading.active\u count()
threading.enumerate()
线程将保持活动状态

除了从
主线程
连接线程之外,还有 可以从线程内部执行的任何其他操作
安全终止?

线程化模块维护已启动但尚未连接的线程列表。它称之为“活动”列表,但实际上是“尚未加入”列表。当程序终止时,线程模块将对列表中剩余的任何内容进行连接。这允许您执行延迟退出,程序将一直运行,直到其所有工作线程完成

通过将线程设置为“守护进程”,可以跳过活动列表。在这种情况下,它不会出现在活动列表中,也不会出现在活动计数中

thread = threading.thread(target=somefunction)
thread.daemon = True
thread.start()
如果创建自己的线程子类,则可以管理deamon标志。它甚至可以自己启动,以简化调用方的操作

class MyWorker(threading.Thread):

    def __init__(self):
        super().__init__()
        self.daemon = True
        self.start()

    def run(self):
        print("do your stuff here")

# example
MyWorker()

run()
返回后,线程保持活动状态的时间有多长?您是在启动自己的线程,还是在使用线程池?测量中可能存在编程或逻辑错误。为什么不给我们看一个例子呢?代码不会包含任何奇怪的东西——只包含基本的东西。也就是说,创建了一个“Thread(target=f)”对象,函数“f”返回和“threading.active_count()>1”。我想,我不能从线程的上下文中将其作为执事,可以吗?是的,有点像
threading
在线程启动时检查标志,因此需要在调用
start
之前设置该标志。您可以编写一个子
threading.Thread
子类,该子类在其
\uuuu init\uuuu
中设置标志,只要调用方使用该对象,它就可以工作。不过,通常情况下,线程应该决定如何处理该线程的过期。但是,编写自己的子类将起作用。