【问题标题】:Python threading timer initial daemonPython线程定时器初始守护进程
【发布时间】:2018-08-10 23:57:34
【问题描述】:

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

self._thread = threading.Timer(interval=2, 
                               function=self._sendRequestState, 
                               args=(self._lockState,), 
                               daemon=True).start()

所以我应该这样写..

self._thread = threading.Timer(interval=2, 
                               function=self._sendRequestState, 
                               args=(self._lockState,))
self._thread.daemon = True
self._thread.start()

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

【问题讨论】:

  • 您的代码中还有其他语句吗?你为什么要让线程成为 daemon 线程?如果你没有其他语句,python 会在只剩下daemon 线程的情况下退出,你的线程将永远没有时间执行。
  • @BrendanAbel 有很多线程 :) 谢谢你!

标签: python multithreading daemon


【解决方案1】:

你可以找到那个threading.Thread()构造函数here(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()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多