详解Python的多线程定时器threading.Timer
threading.Timer
一次timer只生效一次,不会反复循环,如果实现循环触发,代码如下:
import time import threading def createTimer(): t = threading.Timer(2, repeat) t.start() def repeat(): print('Now:', time.strftime('%H:%M:%S',time.localtime())) createTimer() createTimer()
这段代码的功能就是每2秒打印出当前的时间,即一个2秒的定时器。运行效果如下:
E:\py&http://www.cppcns.comgt;python timer.py
Now: 16:36:15Now: 16:36:17Now: 16:36:19Now: 16:36:21Now: 16:36:23Now:www.cppcns.com 16:36:25Now: 16:36:27
cancel函数,可以在定时器被触发前,取消这个Timer。
允许多个定时任务,并发执行,互不干扰。
如果想更精确地控制定时器函数的触发时间,就需要把下一次定时器触发的代码,放在定时器执行代码最开始的地方,如下:
import time import threading def createTimer(): t = threading.Timer(2, repeat) t.start() def repeat(): createTimer() http://www.cppcns.com print('Now-1:', time.strftime('%H:%M:%S',time.localtime())) time.sleep(3) www.cppcns.com print('Now-2:', time.strftime('%H:%M:%S',time.localtime())) createTimer()
定时器repeat要执行至少3秒,但是2秒后,下一个定时器就会被触发,这是允许的!上面这段代码的执行效果如下:
E:\py>python timer.py
Now-1: 16:46:12Now-1: 16:46:14Now-2: 16:46:15Now-1: 16:46:16Now-2: 16:46:17Now-1: 16:46:18Now-2: 16:46:19Now-1: 16:46:20Now-2: 16:46:21Now-1: 16:46:22Now-2: 16:46:23
从打印信息来分析,同时存在多个repeat函数的执行序列是没问题的,这种情况下,还需要认真考虑定时器函数的可重入问题!
以上就是对threading.Timer使用编程客栈的介绍,请注意两种设置定时器循环计时开始的方法,以及他们的区别。
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!
精彩评论