python中的可重置计时器会重复,直到取消
我已经从这个网址复制了代码 创建一个可重置计时器,它工作得很好,但一旦完成,它就结束了。我想重新开始,但我是新手,不知道怎么做 我厌倦了在run()函数的底部创建一个新的自身实例,这行代码如下:python中的可重置计时器会重复,直到取消,python,timer,reset,Python,Timer,Reset,我已经从这个网址复制了代码 创建一个可重置计时器,它工作得很好,但一旦完成,它就结束了。我想重新开始,但我是新手,不知道怎么做 我厌倦了在run()函数的底部创建一个新的自身实例,这行代码如下: print "Time: %s - timer finished!" % time.asctime() 但是python似乎不喜欢它 Eddy Jacob创建的复制粘贴代码如下: from threading import Thread, Event, Timer import time def T
print "Time: %s - timer finished!" % time.asctime()
但是python似乎不喜欢它
Eddy Jacob创建的复制粘贴代码如下:
from threading import Thread, Event, Timer
import time
def TimerReset(*args, **kwargs):
""" Global function for Timer """
return _TimerReset(*args, **kwargs)
class _TimerReset(Thread):
"""Call a function after a specified number of seconds:
t = TimerReset(30.0, f, args=[], kwargs={})
t.start()
t.cancel() # stop the timer's action if it's still waiting
"""
def __init__(self, interval, function, args=[], kwargs={}):
Thread.__init__(self)
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.finished = Event()
self.resetted = True
def cancel(self):
"""Stop the timer if it hasn't finished yet"""
self.finished.set()
def run(self):
print "Time: %s - timer running..." % time.asctime()
while self.resetted:
print "Time: %s - timer waiting for timeout in %.2f..." % (time.asctime(), self.interval)
self.resetted = False
self.finished.wait(self.interval)
if not self.finished.isSet():
self.function(*self.args, **self.kwargs)
self.finished.set()
print "Time: %s - timer finished!" % time.asctime()
def reset(self, interval=None):
""" Reset the timer """
if interval:
print "Time: %s - timer resetting to %.2f..." % (time.asctime(), interval)
self.interval = interval
else:
print "Time: %s - timer resetting..." % time.asctime()
self.resetted = True
self.finished.set()
self.finished.clear()
我使用以下方式运行计时器:
tim = TimerReset(10, AddBlank)
tim.start()
函数AddBlank做了一些事情,但我希望计时器被再次调用,但只有在它结束后。非常感谢您的帮助,我知道在不理解的情况下复制代码是一种不好的做法,但我真的想要一个简单的可重置计时器来重复调用函数,除非重置,这几乎可以做到。将
运行
函数更改为:
def run(self):
while not self.finished.isSet():
print "Time: %s - timer running..." % time.asctime()
self.resetted = True
while self.resetted:
print "Time: %s - timer waiting for timeout in %.2f..." % (time.asctime(), self.interval)
self.resetted = False
self.finished.wait(self.interval)
if not self.finished.isSet():
self.function(*self.args, **self.kwargs)
print "Time: %s - timer finished!" % time.asctime()
这将导致它无限期运行,直到设置了
finished
。这很好,唉,python在“卸载”程序/终止程序时崩溃了。希望我能提供更多帮助。我很确定问题在于卸载时正确地结束线程,但是我在聊天中看到你无法让它工作。如果您添加更多详细信息(或提出有关该部分的新问题),我或其他人可能会提供帮助:3.