Python继承Thread的自定义类中将线程daemon设为True的实现方法
解决方案
你尝试的三种设置守护线程的语法本身都是正确的,未生效通常是两个常见的实现错误导致的:一是自定义Editor类重写__init__方法时没有调用父类Thread的初始化逻辑,二是守护线程的设置时机在start()方法调用之后,线程启动后再修改守护属性不会生效。
以下是可正常运行的实现方案:
方案1:实例化时传入daemon参数
首先确保自定义类的__init__方法先调用父类初始化:
from threading import * class Editor(Thread): def __init__(self, *args, **kwargs): # 必须优先调用父类Thread的初始化方法 super().__init__(*args, **kwargs) # 此处添加你自己的初始化逻辑 if __name__ == "__main__": # 实例化时直接传daemon参数 editor = Editor(daemon=True) # 必须在start方法调用前完成守护属性设置 editor.start()
方案2:实例化后赋值daemon属性
if __name__ == "__main__": editor = Editor() # start方法调用前设置守护属性 editor.daemon = True editor.start()
方案3:类内部默认设置守护属性
from threading import * class Editor(Thread): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 内部直接设置默认守护属性 self.daemon = True # 其他初始化逻辑 if __name__ == "__main__": editor = Editor() editor.start()
你可以在调用start()前打印editor.daemon验证属性是否设置成功。
内容的提问来源于stack exchange,提问作者Genius1512
相关产品推荐
相关产品推荐

