Python的定時器

 在實際應用中,我們經常需要使用定時器去觸發一些事件。Python中通過線程實現定時器timer,其使用非常簡單。看示例:

import threading    def fun_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"""

一段時間後調用一個函數,但並沒有說要循環調用該函數。因此,修改如下:

def fun_timer():      print('Hello Timer!')      global timer      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!<class 'NoneType'><class 'function'>

(2)必須在定時器執行函數內部重複構造定時器,因為定時器構造後只執行1次,必須循環調用。

(3)定時器間隔單位是秒,可以是浮點數,如5.5,0.02等,在執行函數fun_timer內部和外部中給的值可以不同。如上例中第一次執行fun_timer是1秒後,後面的都是5.5秒後執行。

(4)可以使用cancel停止定時器的工作,如下例:


# -*- coding: utf-8 -*-
import threading

import time def fun_timer(): print('Hello Timer!') global timer 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