zoukankan      html  css  js  c++  java
  • 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>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使用的介绍,请注意两种设置定时器循环计时开始的方法,以及他们的区别。

  • 相关阅读:
    MySQL--自增列持久化问题
    MySQL--”自然键”和”代理键”优缺点
    MySQL--REPLACE INTO更新自增列值引发的异常
    MySQL Inception--原理和注意事项
    MySQL Inception--安装
    MySQL--关联更新
    MySQL--Delete语句别名+LIMIT
    MySQL Disk--SSD 特性
    BootStrap简介
    BootStrap简单使用
  • 原文地址:https://www.cnblogs.com/pythonwl/p/15066464.html
Copyright © 2011-2022 走看看