可重置计时器对象实现 python
Resettable Timer object implementation python
我需要 Python 中的计时器,我可以重置它 (timer.reset())。
我已经有一个定期计时器。
有这样的定时器的库吗?
class MyTimer(threading.Timer):
def __init__(self, t):
threading.Thread.__init__(self)
self.__event = threading.Event()
self.__stop_event = threading.Event()
self.__intervall = t
def run(self):
while not self.__stop_event.wait(self.__intervall):
self.__event.set()
def clear(self):
self.__event.clear()
def is_present(self):
return self.__event.is_set()
def cancel(self):
self.__stop_event.set()
这是一个简单的例子。你应该考虑加锁。
import threading
import time
def hi( ):
print('hi')
mine.start()
class ReusableTime():
def __init__(self, t, func):
self._t = t
self._func = func
def start(self):
self._thread = threading.Timer(self._t, self.handler)
self._thread.start()
def handler(self):
self._func()
mine = ReusableTime(2, hi)
mine.start()
time.sleep(100)
这里有一个示例,它实现了 reset
方法以按原始间隔 "extend" 计时器。它使用内部 Timer
对象而不是子类化 threading.Timer
.
from threading import Timer
import time
class ResettableTimer(object):
def __init__(self, interval, function):
self.interval = interval
self.function = function
self.timer = Timer(self.interval, self.function)
def run(self):
self.timer.start()
def reset(self):
self.timer.cancel()
self.timer = Timer(self.interval, self.function)
self.timer.start()
if __name__ == '__main__':
t = time.time()
tim = ResettableTimer(5, lambda: print("Time's Up! Took ", time.time() - t, "seconds"))
time.sleep(3)
tim.reset()
输出:
Time's Up! Took 8.011203289031982 seconds
我需要 Python 中的计时器,我可以重置它 (timer.reset())。 我已经有一个定期计时器。 有这样的定时器的库吗?
class MyTimer(threading.Timer):
def __init__(self, t):
threading.Thread.__init__(self)
self.__event = threading.Event()
self.__stop_event = threading.Event()
self.__intervall = t
def run(self):
while not self.__stop_event.wait(self.__intervall):
self.__event.set()
def clear(self):
self.__event.clear()
def is_present(self):
return self.__event.is_set()
def cancel(self):
self.__stop_event.set()
这是一个简单的例子。你应该考虑加锁。
import threading
import time
def hi( ):
print('hi')
mine.start()
class ReusableTime():
def __init__(self, t, func):
self._t = t
self._func = func
def start(self):
self._thread = threading.Timer(self._t, self.handler)
self._thread.start()
def handler(self):
self._func()
mine = ReusableTime(2, hi)
mine.start()
time.sleep(100)
这里有一个示例,它实现了 reset
方法以按原始间隔 "extend" 计时器。它使用内部 Timer
对象而不是子类化 threading.Timer
.
from threading import Timer
import time
class ResettableTimer(object):
def __init__(self, interval, function):
self.interval = interval
self.function = function
self.timer = Timer(self.interval, self.function)
def run(self):
self.timer.start()
def reset(self):
self.timer.cancel()
self.timer = Timer(self.interval, self.function)
self.timer.start()
if __name__ == '__main__':
t = time.time()
tim = ResettableTimer(5, lambda: print("Time's Up! Took ", time.time() - t, "seconds"))
time.sleep(3)
tim.reset()
输出:
Time's Up! Took 8.011203289031982 seconds