我最近从这个人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
我对这段代码的疑问是:每次运行时,它是否都会创建一个新线程?如果确实如此,它是否仍然会影响我的代码(例如:错误或停止?)
谢谢,伊拉克。
答案 0 :(得分:0)
计时器在每次启动时都会创建一个线程。来自docs:
此类表示仅在经过一定时间(计时器)后才应执行的操作。 Timer是Thread的子类,因此也可以作为创建自定义线程的示例。
与线程一样,通过调用其start()方法来启动计时器。可以通过调用cancel()方法来停止计时器(在其动作开始之前)。
但是,只有一个“实例”在运行,因为它在再次调用自身之前等待函数结束。因此,除非您启动多个RepeatedTimers ...
是否会影响您的代码?除了需要确保代码是线程安全的之外,还请注意“可以停止计时器(在其动作开始之前 )”,因此调用stop()或cancel不会中断一半您的功能。