Python线程计时器初始守护进程

Haz*_*zel 8 python multithreading daemon

此代码不起作用......

self._thread = threading.Timer(interval=2, 
                               function=self._sendRequestState, 
                               args=(self._lockState,), 
                               daemon=True).start()
Run Code Online (Sandbox Code Playgroud)

所以我应该这样写..

self._thread = threading.Timer(interval=2, 
                               function=self._sendRequestState, 
                               args=(self._lockState,))
self._thread.daemon = True
self._thread.start()
Run Code Online (Sandbox Code Playgroud)

但是Timer该类有Thread.__init__,Thread.__init__有“ daemon”作为输入参数。我不知道为什么它不起作用......

Den*_*ers 9

您可以在此处找到该threading.Thread()构造函数的源代码(cpython,最常见的 Python 实现):

def __init__(self, interval, function, args=None, kwargs=None):
    Thread.__init__(self)
    self.interval = interval
    self.function = function
    self.args = args if args is not None else []
    self.kwargs = kwargs if kwargs is not None else {}
    self.finished = Event()
Run Code Online (Sandbox Code Playgroud)

如果您传入daemon=True它,它将被放入kwargs,但是正如您在代码中看到的那样,它没有任何反应。所以是的,你是对的,你必须daemon在创建它之后(以及调用之前设置属性start()。在构造Timer.