在Python中停止计时器后,计时器无法重新启动

发布于 2021-01-29 16:52:31

我正在使用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()

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

repeat_timer = RepeatingTimer(interval_timer_sec, timer_function, arg1, arg2)
repeat_timer.start()

要停止计时器,代码为:

repeat_timer.stop()

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

谢谢。

关注者
0
被浏览
146
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是更正的版本:

    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()
    

    示例运行:

    $ python -i foo.py
    >>> Hello World!
    
    >>> Hello World!
    
    >>> t.cancel()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看