线程计时器是否每次都会创建一个新线程?

时间:2019-05-23 20:33:36

标签: python python-multithreading

我最近从这个人here那里得到了这段代码

供参考:

from threading import Timer

class RepeatedTimer(object):
    def __init__(self, interval, function, *args, **kwargs):
        self._timer = None
        self.interval = interval
        self.function = function
        self.args = args
        self.kwargs = kwargs
        self.is_running = False
        self.start()

    def _run(self):
        self.is_running = False
        self.start()
        self.function(*self.args, **self.kwargs)

    def start(self):
        if not self.is_running:
            self._timer = Timer(self.interval, self._run)
            self._timer.start()
            self.is_running = True

    def stop(self):
        self._timer.cancel()
        self.is_running = False

我对这段代码的疑问是:每次运行时,它是否都会创建一个新线程?如果确实如此,它是否仍然会影响我的代码(例如:错误或停止?)

谢谢,伊拉克。

1 个答案:

答案 0 :(得分:0)

计时器在每次启动时都会创建一个线程。来自docs

  

此类表示仅在经过一定时间(计时器)后才应执行的操作。 Timer是Thread的子类,因此也可以作为创建自定义线程的示例。

     

与线程一样,通过调用其start()方法来启动计时器。可以通过调用cancel()方法来停止计时器(在其动作开始之前)。

但是,只有一个“实例”在运行,因为它在再次调用自身之前等待函数结束。因此,除非您启动多个RepeatedTimers ...

是否会影响您的代码?除了需要确保代码是线程安全的之外,还请注意“可以停止计时器(在其动作开始之前 )”,因此调用stop()或cancel不会中断一半您的功能。