Python的定時器

2021-08-09 01:53:39 字數 2088 閱讀 6069

在實際應用中,我們經常需要使用定時器去觸發一些事件。p

ython中通過執行緒實現定時器timer,其使用非常簡單。看示例:

importthreading

deffun_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 -*-
import 

threading

importtime

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,也...