欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Python的多线程定时器threading.Timer

程序员文章站 2022-03-04 12:54:39
threading.timer一次timer只生效一次,不会反复循环,如果实现循环触发,代码如下:import timeimport threadingdef createtimer(): t...

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>python timer.py
now: 16:36:15
now: 16:36:17
now: 16:36:19
now: 16:36:21
now: 16:36:23
now: 16:36:25
now: 16:36:27

cancel函数,可以在定时器被触发前,取消这个timer。

允许多个定时任务,并发执行,互不干扰。

如果想更精确地控制定时器函数的触发时间,就需要把下一次定时器触发的代码,放在定时器执行代码最开始的地方,如下:

import time
import threading
def createtimer():
    t = threading.timer(2, repeat)
    t.start()
def repeat():
    createtimer()
    print('now-1:', time.strftime('%h:%m:%s',time.localtime()))
    time.sleep(3)
    print('now-2:', time.strftime('%h:%m:%s',time.localtime()))
createtimer()

定时器repeat要执行至少3秒,但是2秒后,下一个定时器就会被触发,这是允许的!上面这段代码的执行效果如下:

e:\py>python timer.py
now-1: 16:46:12
now-1: 16:46:14
now-2: 16:46:15
now-1: 16:46:16
now-2: 16:46:17
now-1: 16:46:18
now-2: 16:46:19
now-1: 16:46:20
now-2: 16:46:21
now-1: 16:46:22
now-2: 16:46:23

从打印信息来分析,同时存在多个repeat函数的执行序列是没问题的,这种情况下,还需要认真考虑定时器函数的可重入问题!

以上就是对threading.timer使用的介绍,请注意两种设置定时器循环计时开始的方法,以及他们的区别。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!