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()但计时器无法启动.定时器如何在停止后重新启动?
谢谢.
这是一个更正版本:
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)
| 归档时间: |
|
| 查看次数: |
8389 次 |
| 最近记录: |