欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python標(biāo)準(zhǔn)庫(kù)sched模塊使用指南

 更新時(shí)間:2017年07月06日 08:53:52   作者:j_hao104  
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)sched模塊使用的相關(guān)資料,需要的朋友可以參考下

事件調(diào)度

sched 模塊內(nèi)容很簡(jiǎn)單,只定義了一個(gè)類。它用來(lái)最為一個(gè)通用的事件調(diào)度模塊。

class sched.scheduler(timefunc, delayfunc) 這個(gè)類定義了調(diào)度事件的通用接口,它需要外部傳入兩個(gè)參數(shù), timefunc 是一個(gè)沒(méi)有參數(shù)的返回時(shí)間類型數(shù)字的函數(shù)(常用使用的如time模塊里面的time), delayfunc 應(yīng)該是一個(gè)需要一個(gè)參數(shù)來(lái)調(diào)用、與timefunc的輸出兼容、并且作用為延遲多個(gè)時(shí)間單位的函數(shù)(常用的如time模塊的sleep)。

下面是一個(gè)列子:

import sched, time

s = sched.scheduler(time.time, time.sleep) # 生成調(diào)度器

def print_time():
print "From print_time", time.time()

def print_some_times():
print time.time()
s.enter(5, 1, print_time, ()) 
# 加入調(diào)度事件
# 四個(gè)參數(shù)分別是:
# 間隔事件(具體值決定與delayfunc, 這里為秒);
# 優(yōu)先級(jí)(兩個(gè)事件在同一時(shí)間到達(dá)的情況);
# 觸發(fā)的函數(shù);
# 函數(shù)參數(shù);
s.enter(10, 1, print_time, ())

# 運(yùn)行
s.run()
print time.time()

if __name__ == '__main__':
print_some_times()

看到的輸出結(jié)果,隔5秒中執(zhí)行第一個(gè)事件,隔10秒后執(zhí)行第二個(gè)事件:

1499259731.99
From print_time 1499259736.99
From print_time 1499259741.99
1499259741.99

在多線程場(chǎng)景中,會(huì)有線程安全問(wèn)題,run()函數(shù)會(huì)阻塞主線程。官方建議使用 threading.Timer 類代替:

import time
from threading import Timer

def print_time():
print "From print_time", time.time()

def print_some_times():
print time.time()
Timer(5, print_time, ()).start()
Timer(10, print_time, ()).start()
time.sleep(11) # 阻塞主線程,等待調(diào)度程序執(zhí)行完畢,再執(zhí)行后面內(nèi)容
print time.time()

if __name__ == '__main__':
print_some_times()

Scheduler對(duì)象方法

scheduler對(duì)象擁有下面這些方法或?qū)傩?

scheduler.enterabs(time, priority, action, argument)

加入一個(gè)事件, time 參數(shù)應(yīng)該是一個(gè)與傳遞給構(gòu)造函數(shù)的 timefunc 函數(shù)的返回值相兼容的數(shù)值類型。在同一時(shí)間到達(dá)的事件將按照 priority 順序執(zhí)行。

執(zhí)行事件其實(shí)就是執(zhí)行 action(argument) 。argument必須是一個(gè)包含 action 參數(shù)的序列。

返回值是一個(gè)事件,它可以用于稍后取消事件(請(qǐng)參見(jiàn) cancel() )。

scheduler.enter(delay, priority, action, argument)

安排一個(gè)事件來(lái)延遲 delay 個(gè)時(shí)間單位。除了時(shí)間外,其他參數(shù)、含義和返回值與 enterabs() 的值相同。其實(shí)內(nèi)部 enterabs 就是用來(lái)被 enter 調(diào)用。

scheduler.cancel(event)

從隊(duì)列中刪除事件。如果事件不是當(dāng)前隊(duì)列中的事件,則該方法將跑出一個(gè) ValueError 。

scheduler.empty()

判斷隊(duì)列是否為空。

scheduler.run()

運(yùn)行所有預(yù)定的事件。這個(gè)函數(shù)將等待(使用傳遞給構(gòu)造函數(shù)的 delayfunc() 函數(shù)),然后執(zhí)行事件,直到不再有預(yù)定的事件。

任何 action 或 delayfunc 都可以引發(fā)異常。在這兩種情況下,調(diào)度器將保持一個(gè)一致的狀態(tài)并傳播異常。如果一個(gè)異常是由 action 引起的,就不會(huì)再繼續(xù)執(zhí)行 run() 。

scheduler.queue

只讀屬性,返回一個(gè)即將到達(dá)的事件列表(按到達(dá)事件排序),每個(gè)事件都是有 time 、 priority 、 action 、 argument 組成的 namedtuple 。

相關(guān)文章

最新評(píng)論