在Python中停止后,Timer无法重新启动

use*_*486 4 python timer python-multithreading python-2.7

我使用的是Python 2.7.我有一个计时器,它一直重复计时器回调操作,直到它被停止.它使用Timer对象.问题是在它停止后,它无法重新启动.Timer对象代码如下;

from threading import Timer

class RepeatingTimer(object):
    def __init__(self,interval, function, *args, **kwargs):
        super(RepeatingTimer, self).__init__()
        self.args = args
        self.kwargs = kwargs
        self.function = function
        self.interval = interval

    def start(self):
        self.callback()

    def stop(self):
        self.interval = False       

    def callback(self):
        if self.interval:
            self.function(*self.args, **self.kwargs)
            Timer(self.interval, self.callback, ).start()
Run Code Online (Sandbox Code Playgroud)

要启动计时器,请运行以下代码;

repeat_timer = RepeatingTimer(interval_timer_sec, timer_function, arg1, arg2)
repeat_timer.start()    
Run Code Online (Sandbox Code Playgroud)

要停止计时器,代码是;

repeat_timer.stop() 
Run Code Online (Sandbox Code Playgroud)

停止后,我尝试通过调用重新启动计时器,repeat_timer.start()但计时器无法启动.定时器如何在停止后重新启动?

谢谢.

Jam*_*lls 5

这是一个更正版本:

from __future__ import print_function


from threading import Timer


def hello():
    print("Hello World!")


class RepeatingTimer(object):

    def __init__(self, interval, f, *args, **kwargs):
        self.interval = interval
        self.f = f
        self.args = args
        self.kwargs = kwargs

        self.timer = None

    def callback(self):
        self.f(*self.args, **self.kwargs)
        self.start()

    def cancel(self):
        self.timer.cancel()

    def start(self):
        self.timer = Timer(self.interval, self.callback)
        self.timer.start()


t = RepeatingTimer(3, hello)
t.start()
Run Code Online (Sandbox Code Playgroud)

示例运行:

$ python -i foo.py
>>> Hello World!

>>> Hello World!

>>> t.cancel()
Run Code Online (Sandbox Code Playgroud)