python事件排程庫sched

2022-05-29 03:54:08 字數 2897 閱讀 8632

sched模組內容很簡單,只定義了乙個類。它用來最為乙個通用的事件排程模組。

class sched.scheduler(timefunc, delayfunc)這個類定義了排程事件的通用介面,它需要外部傳入兩個引數,timefunc是乙個沒有引數的返回時間型別數字的函式(常用使用的如time模組裡面的time),delayfunc應該是乙個需要乙個引數來呼叫、與timefunc的輸出相容、並且作用為延遲多個時間單位的函式(常用的如time模組的sleep)。

下面是乙個列子:

import

sched, time

#生成排程器

s =sched.scheduler(time.time, time.sleep)

def print_time(a='

default'):

print("

from print_time

", time.time(), a)

defprint_some_times():

print

(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()

print

(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類代替

import

time

from threading import

timer

defprint_time(t):

print("

from print_time

", time.time(),t)

defprint_some_times():

print

(time.time())

timer(5, print_time,args=("5s"

,)).start()

timer(10, print_time,args=("

10s"

,)).start()

time.sleep(11) #

阻塞主線程,等待排程程式執行完畢,再執行後面內容

print

(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()函式),然後執行事件,直到不再有預定的事件。

任何actiondelayfunc都可以引發異常。在這兩種情況下,排程器將保持乙個一致的狀態並傳播異常。如果乙個異常是由action引起的,就不會再繼續執行run()

唯讀屬性,返回乙個即將到達的事件列表(按到達事件排序),每個事件都是有timepriorityactionargument組成的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 是執行計畫,有兩個選...