在實際應用中,我們經常需要使用定時器去觸發一些事件。p
ython中通過執行緒實現定時器timer,其使用非常簡單。看示例:
importthreadingdeffun_timer():
print('hello timer!')
timer = threading.timer(1
, fun_timer)
timer.start()
輸出結果:hello timer!
process finished with exit code 0
注意,只輸出了一次,程式就結束了,顯然不是我們想要的結果。看timer類中的解釋性描述:
"""call a function after a specified number of seconds"""一段時間後呼叫乙個函式,但並沒有說要迴圈呼叫該函式。因此,修改如下:
deffun_timer():print('hello timer!')
globaltimer
timer = threading.timer(5.5
, fun_timer)
timer.start()
timer = threading.timer(1
, fun_timer)
timer.start()
輸出結果:hello timer!
hello timer!
hello timer!
hello timer!
............
定時器工作正常。
在使用python定時器時需要注意如下4個方面:
(1)定時器建構函式主要有2個引數,第乙個引數為時間,第二個引數為函式名,第乙個引數表示多長
時間後呼叫後面第二個引數指明的函式。第二個引數注意是函式物件,
進行引數傳遞,用函式名(如fun_timer)表示該物件,
不能寫成函式
執行語句fun_timer(),不然會報錯。用type檢視下,可以看出兩者的區別。
print(type(fun_timer()))print(type(fun_timer))
輸出結果:hello timer!
(2)必須在定時器執行函式內部重複構造定時器,因為定時器構造後只執行1次,必須迴圈呼叫。
(3)定時器間隔單位是秒,可以是浮點數,如5.5,0.02等,在執
行函式fun_timer內部和外部中給的值可以不同。如上例中第一次執行fun_timer是1秒後,後面的都是5.5秒後執行。
(4)可以使用cancel停止定時器的工作,如下例:
# -*- coding: utf-8 -*-
importimporttimethreading
deffun_timer():
print('hello timer!')
globaltimer
timer = threading.timer(5.5
, fun_timer)
timer.start()
timer = threading.timer(1
, fun_timer)
timer.start()
time.sleep(15) # 15秒後停止定時器
timer.cancel()
輸出結果:hello timer!
hello timer!
hello timer!
process finished with exit code 0
python 迴圈定時器
有時候需要迴圈執行某個任務,最簡單的就是用thread.timer.谷歌了一下,發現大家竟然用sleep 來實現迴圈,也不知道誰想的這個方法,竟然很少有人想到join一下,很奇怪。coding utf 8 created on 2016年4月25日 author 55haitao import th...
Mysql 檢視定時器 開啟定時器 設定定時器時間
1.檢視是否開啟evevt與開啟evevt。1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。show variables like sche 1.2 開啟evevt功能 setglobal event scheduler 1 ...
定時器 STM32定時器 基本定時器1
我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...