日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 Python教程 正文

詳解Python的多線程定時器threading.Timer_python

作者:mb5fe5608dce902 ? 更新時間: 2022-03-25 Python教程

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使用的介紹,請注意兩種設置定時器循環計時開始的方法,以及他們的區別。

總結

原文鏈接:https://blog.51cto.com/u_15067267/3837295

欄目分類
最近更新