You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Thread子类创建的线程设为daemon线程随程序结束自动终止

为继承threading.Thread的自定义类设置daemon守护线程的方法

核心原理

Python线程的daemon属性为True时,该线程为守护线程。Python进程退出时,会自动终止所有守护线程,不会等待守护线程执行完成;默认创建的线程daemon属性为False(非守护线程),进程会等待所有非守护线程执行完毕才会退出,这就是示例中子线程死循环导致主程序结束后进程无法退出的原因。

设置方式

注意:daemon属性必须在线程调用start()方法启动前设置,启动后修改属性不生效,共有两种合法配置方式:

  • 方式1:在自定义线程类的__init__初始化方法中配置,既可以调用父类构造方法时传入daemon=True参数,也可以在初始化逻辑中设置self.daemon = True
  • 方式2:实例化线程对象后,调用start()前,手动设置实例的daemon属性为True

修改后的完整示例代码

import threading
import time

class A_Class(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self, daemon=True)
        # 也可以不通过父类参数传值,单独写 self.daemon = True 实现相同效果

    def __del__(self):
        print('deleted')

    def run(self):
        while True:
            print("running")
            time.sleep(1)

a_obj = A_Class()
# 若不在类内部设置,也可以在此处添加 a_obj.daemon = True 完成配置
a_obj.start()

time.sleep(5)
print('The time is up, the thread should end')

运行上述代码,主线程执行5秒结束后,守护子线程会被自动终止,不会继续在后台无限循环运行。

内容的提问来源于stack exchange,提问作者gero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.19 16:15:45