python3定时器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3定时器相关的知识,希望对你有一定的参考价值。
参考技术A 在实际应用中,我们经常需要使用定时器去触发一些事件。Python中通过线程实现定时器timer,其使用非常简单。看示例:一秒后输出 Hello Timer!
oneshot的定时器这样就可以实现。
如果要实现cycle的定时器,则可以:
1s后定时器启动后,将再次以5.5s为间隔周期性执行回调fun_timer函数
结果是:
在使用Python定时器时需要注意:
1.定时器构造函数主要有2个参数,第一个参数为时间,第二个参数为函数名,第一个参数表示多长时间后调用后面第二个参数指明的函数。第二个参数注意是函数对象,进行参数传递,用函数名(如fun_timer)表示该对象,不能写成函数执行语句fun_timer(),不然会报错。
2.定时器间隔单位是秒,可以是浮点数,如5.5,0.02等,在执行函数fun_timer内部和外部中给的值可以不同。如上例中第一次执行fun_timer是1秒后,后面的都是5.5秒后执行。
3.可以使用cancel停止定时器的工作
Python 定时器剩余时间
【中文标题】Python 定时器剩余时间【英文标题】:Python Timer remaining time 【发布时间】:2018-02-02 16:20:08 【问题描述】:如何从 Python Timer 对象计算剩余时间。
timer = Timer(10, print, ("expiry"))
timer.start()
...
从这里,我如何找出计时器到期前的剩余时间?
【问题讨论】:
【参考方案1】:只需在启动线程Timer时设置一个值
timer = Timer(10, print, ("expiry"))
....
start_time = time.time()
timer.start()
time.sleep(3)
....
print ("Running for : %s seconds"%(time.time()-start_time))
你总是可以创建自己的计时器类
class MyTimer(threading._Timer):
started_at = None
def start(self):
self.started_at = time.time()
threading._Timer.start(self)
def elapsed(self):
return time.time() - self.started_at
def remaining(self):
return self.interval - self.elapsed()
timer = MyTimer(10, print, ("expiry"))
timer.start()
for i in range(5):
time.sleep(1)
print (timer.remaining())
【讨论】:
这行得通。我希望 Timer 中有一个属性可以使用,而无需自己保存开始时间。 为什么你从 _Timer 继承而不是从 Timer 继承?这是pythonic的东西,还是Timer不可子类化?以上是关于python3定时器的主要内容,如果未能解决你的问题,请参考以下文章