python的sched模塊--延時調度


我們經常需要定時的執行某個任務,在Linux下我們有強大的crontab,但是在Python這個粒度(定時執行函數),如何處理呢?
除了第三方的模塊外,標准庫為我們提供了sched模塊和Timer類。

先說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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM