python - 可复位定时器对象实现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()
解决方案
这是一个实现reset
将计时器“扩展”原始间隔的方法的示例。它使用内部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 - 连接到 Websocket 的证书问题
- r - 列表的元素用作R中的变量?
- java - 通过数字和自定义类型的开关选择器表达式的 JLS 违规
- java - spring data jpa原生查询中基于地图索引的查询
- java - 如果语句没有更新?
- javascript - 使用动态(javascript)创建的 div 定位正确 div id 的问题
- java - 如何在 Android Java 中创建侧边导航菜单?(不是抽屉)
- android - 在 Flutter 中禁用旋转以横向和纵向拍摄相机照片
- dialog - 处理 Google Hangout Dialog Bot 中的事件 - 无法在对话框中使图像/按钮可点击
- reactjs - Redux with React - 传播不可迭代实例的尝试无效。为了可迭代,非数组对象必须有一个 [Symbol.iterator]() 方法