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

python?包中的sched?事件調(diào)度器的操作方法

 更新時間:2022年04月30日 14:35:37   作者:autofelix  
sched模塊內(nèi)容很簡單,只定義了一個類。它用來最為一個通用的事件調(diào)度模塊,接下來通過本文給大家介紹python?包之?sched?事件調(diào)度器教程,需要的朋友可以參考下

一、延遲運行事件

  • 在一個延遲或規(guī)定時間之后執(zhí)行事件,需要采用enter()方法,參數(shù)如下:
  • 間隔時間 ( 具體值決定與delayfunc,這里為秒 )
  • 優(yōu)先級 ( 兩個事件在同一時間到達時,先執(zhí)行哪一個 )
  • 調(diào)用的函數(shù)
  • 函數(shù)參數(shù)
import sched
import time
# 生成調(diào)度器
scheduler = sched.scheduler(time.time, time.sleep)
def print_event(name):
    print ('EVENT:', time.time(), name)
print ('START:', time.time())
# 分別設(shè)置在執(zhí)行后2秒、3秒之后執(zhí)行調(diào)用函數(shù)
scheduler.enter(2, 1, print_event, ('first',))
scheduler.enter(3, 1, print_event, ('second',))
# 運行調(diào)度器
scheduler.run()
# 輸出結(jié)果
# START: 1532050215.3737717
# EVENT: 1532050217.3747234 first
# EVENT: 1532050218.375626 second

二、重疊事件

  • 調(diào)用 run() 塊執(zhí)行所有的事件
  • 每個事件都在同一線程中運行,所以如果一個事件需要更長的時間,延遲事件將會有重疊。
  • 為了不丟失事件,延遲事件將會在之前事件運行完再被執(zhí)行
  • 但一些延遲事件可能會晚于原本計劃的事件
import sched
import time
scheduler = sched.scheduler(time.time, time.sleep)
def long_event(name):
    print('BEGIN EVENT :', time.time(), name)
    time.sleep(2)
    print('FINISH EVENT:', time.time(), name)
print('START:', time.time())
scheduler.enter(2, 1, long_event, ('first',))
# 事件無法在設(shè)想的3秒后執(zhí)行,將會順延執(zhí)行
scheduler.enter(3, 1, long_event, ('second',))
scheduler.run()
# 輸出結(jié)果
# START: 1532051082.8237524
# BEGIN EVENT : 1532051084.8392828 first
# FINISH EVENT: 1532051086.8475456 first
# BEGIN EVENT : 1532051086.8475456 second
# FINISH EVENT: 1532051088.8557353 second

三、事件優(yōu)先級

如果多個事件是同一時間執(zhí)行,通過設(shè)置他們的優(yōu)先級值,用于確定順序運行

import sched
import time
scheduler = sched.scheduler(time.time, time.sleep)
def print_event(name):
    print('EVENT:', time.time(), name)
now = time.time()
print('START:', now)
scheduler.enterabs(now+2, 2, print_event, ('first',))
scheduler.enterabs(now+2, 1, print_event, ('second',))
scheduler.run()
# 輸出結(jié)果
# START: 1532052567.6057265
# EVENT: 1532052569.621258 second
# EVENT: 1532052569.621258 first

四、取消事件

利用enter()和enterabs()返回一個引用事件用來取消它

import sched
import threading
import time
scheduler = sched.scheduler(time.time, time.sleep)
# 建立一個全局 線程計數(shù)器
counter = 0
def increment_counter(name):
    global counter
    print('EVENT:', time.time(), name)
    counter += 1
    print('NOW:', counter)
print('START:', time.time())
e1 = scheduler.enter(2, 1, increment_counter, ('E1',))
e2 = scheduler.enter(3, 1, increment_counter, ('E2',))
# 開始一個線程執(zhí)行事件
t = threading.Thread(target=scheduler.run)
t.start()
# 在主線程,取消第一個預(yù)定事件
scheduler.cancel(e1)
# 等待線程調(diào)度程序完成運行
t.join()
# 輸出結(jié)果
# START: 1532053265.5280123
# EVENT: 1532053268.528813 E2
# NOW: 1

五、其他方法

# 判斷隊列是否為空
scheduler.empty()
# 只讀屬性,返回一個即將到達的事件列表(按到達事件排序),每個事件都是有 time 、 priority 、 action 、 argument 組成的 namedtuple
scheduler.queue

到此這篇關(guān)于python 包之 sched 事件調(diào)度器教程的文章就介紹到這了,更多相關(guān)python事件調(diào)度器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

最新評論