sched
模組內容很簡單,只定義了乙個類。它用來最為乙個通用的事件排程模組。
class sched.scheduler(timefunc, delayfunc)
這個類定義了排程事件的通用介面,它需要外部傳入兩個引數,timefunc
是乙個沒有引數的返回時間型別數字的函式(常用使用的如time模組裡面的time),delayfunc
應該是乙個需要乙個引數來呼叫、與timefunc的輸出相容、並且作用為延遲多個時間單位的函式(常用的如time模組的sleep)。
下面是乙個列子:
importsched, time
#生成排程器
s =sched.scheduler(time.time, time.sleep)
def print_time(a='
default'):
print("
from print_time
", time.time(), a)
defprint_some_times():
(time.time())
#加入排程事件
s.enter(10, 1, print_time) #
default
#四個引數分別是:
#間隔時間(具體值決定與delayfunc, 這裡為秒);
#優先順序(兩個事件在同一時間到達的情況);
#觸發的函式;
#函式引數
s.enter(5, 2, print_time, argument=('
positional
',))#
positional
s.enter(5, 1, print_time, kwargs=)#
keyword
#執行排程
s.run()
(time.time())
print_some_times()
#執行結果:先列印keyword,因為時間5秒,級別1高,然後是5秒級別2的positional,最後才是10秒的default
1556808770.1539588from print_time 1556808775.1548176keyword
from print_time 1556808775.1548176positional
from print_time 1556808780.15493default
1556808780.15493
在多執行緒場景中,會有執行緒安全問題,run()函式會阻塞主線程。官方建議使用threading.timer
類代替
importtime
from threading import
timer
defprint_time(t):
print("
from print_time
", time.time(),t)
defprint_some_times():
(time.time())
timer(5, print_time,args=("5s"
,)).start()
timer(10, print_time,args=("
10s"
,)).start()
time.sleep(11) #
阻塞主線程,等待排程程式執行完畢,再執行後面內容
(time.time())
print_some_times()
#執行結果
1556810008.0475848from print_time 1556810013.04818655s
from print_time 1556810018.049205810s
1556810019.048601
scheduler物件擁有下面這些方法或屬性:
加入乙個事件,time
引數應該是乙個與傳遞給建構函式的timefunc
函式的返回值相相容的數值型別。在同一時間到達的事件將按照priority
順序執行。
執行事件其實就是執行action(argument)
。argument必須是乙個包含action
引數的序列。
返回值是乙個事件,它可以用於稍後取消事件(請參見cancel()
)。
安排乙個事件來延遲delay
個時間單位。除了時間外,其他引數、含義和返回值與enterabs()
的值相同。其實內部enterabs
就是用來被enter
呼叫。
從佇列中刪除事件。如果事件不是當前佇列中的事件,則該方法將跑出乙個valueerror
。
判斷佇列是否為空。
執行所有預定的事件。這個函式將等待(使用傳遞給建構函式的delayfunc()
函式),然後執行事件,直到不再有預定的事件。
任何action
或delayfunc
都可以引發異常。在這兩種情況下,排程器將保持乙個一致的狀態並傳播異常。如果乙個異常是由action
引起的,就不會再繼續執行run()
。
唯讀屬性,返回乙個即將到達的事件列表(按到達事件排序),每個事件都是有time
、priority
、action
、argument
組成的namedtuple
python輕量級定時任務排程庫schedule
import schedule import time def job print i m working.schedule.every 10 minutes.do job schedule.every hour.do job schedule.every day.at 10 30 do job s...
mysql 事件排程器 MySQL事件排程器
一 建立排程器 將資料庫按自定義的時間週期觸發某種操作,類似linux下的crontab 例項 建立排程器後的每個1小時觸發一次 create event myevent on schedule at current timestamp interval 1 hour doupdate mysche...
mysql事件排程
事件排程分為兩種 at 事件可為一次 執行完後,事件被刪除將不存在 every 多次 相當於定時器,每隔多久執行一次 當事件的狀態如圖 enable 該事件有效 disable 該事件為時為無效 事件的sql語句解釋 event name 是你要建立的事件名稱 schedule 是執行計畫,有兩個選...