咱們常常須要定時的執行某個任務,在Linux下咱們有強大的crontab,可是在Python這個粒度(定時執行函數),如何處理呢?
除了第三方的模塊外,標準庫爲咱們提供了sched模塊和Timer類。socket
先說sched模塊,準確的說,它是一個調度(延時處理機制),每次想要定時執行某任務都必須寫入一個調度。
使用步驟以下:
(1)生成調度器:
s = sched.scheduler(time.time,time.sleep)
第一個參數是一個能夠返回時間戳的函數,第二個參數能夠在定時未到達以前阻塞。能夠說sched模塊設計者是「在下很大的一盤棋」,好比第一個函數能夠是自定義的一個函數,不必定是時間戳,第二個也能夠是阻塞socket等。
(2)加入調度事件
其實有enter、enterabs等等,咱們以enter爲例子。
s.enter(x1,x2,x3,x4)
四個參數分別爲:間隔事件、優先級(用於同時間到達的兩個事件同時執行時定序)、被調用觸發的函數,給他的參數(注意:必定要以tuple給如,若是隻有一個參數就(xx,))
(3)運行
s.run()
注意sched模塊不是循環的,一次調度被執行後就Over了,若是想再執行,請再次enter函數
import time,sched #被調度觸發的函數 def event_func(msg): print "Current Time:",time.time(),'msg:',msg if __name__=="__main__": #初始化sched模塊和scheduler類 s=sched.scheduler(time.time,time.sleep) #scheduler的兩個參數用法複雜,能夠不作任何更改 #設置兩個調度 s.enter(1,2,event_func,("Small event",)) s.enter(2,1,event_func,("Big event",)) ##四個參數分別爲:間隔事件、優先級(用於同時間到達的兩個事件同時執行時定序)、被調用觸發的函數,給他 #的參數(注意:必定要以tuple給如,若是隻有一個參數就(xx,)) s.run() #運行。注意sched模塊不是循環的,一次調度被執行後就Over了,若是想再執行,請再次enter while True: time.sleep(100)