Python標準庫筆記 5 sched模組

2022-10-10 12:42:09 字數 2434 閱讀 8835

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

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

下面是乙個列子:

import sched, time

s = sched.scheduler(time.time, time.sleep) # 生成排程器

defprint_time

():print

"from print_time", time.time()

defprint_some_times

():print time.time()

s.enter(5, 1, print_time, ())

# 加入排程事件

# 四個引數分別是:

# 間隔事件(具體值決定與delayfunc, 這裡為秒);

# 優先順序(兩個事件在同一時間到達的情況);

# 觸發的函式;

# 函式引數;

s.enter(10, 1, print_time, ())

# 執行

s.run()

print time.time()

if __name__ == '__main__':

print_some_times()

看到的輸出結果,隔5秒中執行第乙個事件,隔10秒後執行第二個事件:

1499259731.99

from print_time 1499259736.99

from print_time 1499259741.99

1499259741.99

在多執行緒場景中,會有執行緒安全問題,run()函式會阻塞主線程。官方建議使用threading.timer類代替:

import time

from threading import timer

defprint_time

():print

"from print_time", time.time()

defprint_some_times

():print time.time()

timer(5, print_time, ()).start()

timer(10, print_time, ()).start()

time.sleep(11) # 阻塞主線程,等待排程程式執行完畢,再執行後面內容

print time.time()

if __name__ == '__main__':

print_some_times()

scheduler物件擁有下面這些方法或屬性:

加入乙個事件,time引數應該是乙個與傳遞給建構函式的timefunc函式的返回值相相容的數值型別。在同一時間到達的事件將按照priority順序執行。

執行事件其實就是執行action(argument)。argument必須是乙個包含action引數的序列。

返回值是乙個事件,它可以用於稍後取消事件(請參見cancel())。

安排乙個事件來延遲delay個時間單位。除了時間外,其他引數、含義和返回值與enterabs()的值相同。其實內部enterabs就是用來被enter呼叫。

從佇列中刪除事件。如果事件不是當前佇列中的事件,則該方法將跑出乙個valueerror

判斷佇列是否為空。

執行所有預定的事件。這個函式將等待(使用傳遞給建構函式的delayfunc()函式),然後執行事件,直到不再有預定的事件。

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

唯讀屬性,返回乙個即將到達的事件列表(按到達事件排序),每個事件都是有timepriorityactionargument組成的namedtuple

Python學習筆記(十二) 標準庫

sys標準庫 sys主要負責直譯器與程式的互動,提供了一系列的函式用於和直譯器進行互動,並可以通過該模組訪問直譯器使用或者維護的變數。詳解文章 os標準庫 os模組負責程式與作業系統的互動,提供了訪問作業系統底層的介面。常用方法有 os.remove path filename 刪除檔案 os.re...

python學習筆記 13 標準庫

1.包 模組基本概念 2.sys模組 函式 變數 描述ar 命令列引數,包括指令碼名稱 exit arg 退出當前的程式,可以引數為給定的返回值或錯誤資訊 modules 對映模組名稱到載入模組的字典 path 查詢模組所在的目錄的目錄列表 platform 平台表示,類似sunos5或win32的...

python標準庫 時間庫

眾所皆知,每乙個程式語言都有自己的時間類庫,python也不例外用法十分簡單 最基本的類,time類 time基本函式介紹 import time print time.asctime 如果未傳入乙個tuple或乙個time struct就是使用當前的時間,返回乙個24字長的時間字串 就這個mon ...