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定时器的主要内容,如果未能解决你的问题,请参考以下文章

多任务定时发送python3

Python3.x:定时任务实现方式

Python3 - 时间处理与定时任务

python3:定时执行自动化测试脚本

python3之51cto自动定时签到

Python3-apscheduler模块-定时调度