溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python包中的sched事件調度器怎么用

發布時間:2022-05-05 11:01:05 來源:億速云 閱讀:254 作者:iii 欄目:開發技術

本篇內容主要講解“python包中的sched事件調度器怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python包中的sched事件調度器怎么用”吧!

一、延遲運行事件

  • 在一個延遲或規定時間之后執行事件,需要采用enter()方法,參數如下:

  • 間隔時間 ( 具體值決定與delayfunc,這里為秒 )

  • 優先級 ( 兩個事件在同一時間到達時,先執行哪一個 )

  • 調用的函數

  • 函數參數

import sched
import time
# 生成調度器
scheduler = sched.scheduler(time.time, time.sleep)
def print_event(name):
    print ('EVENT:', time.time(), name)
print ('START:', time.time())
# 分別設置在執行后2秒、3秒之后執行調用函數
scheduler.enter(2, 1, print_event, ('first',))
scheduler.enter(3, 1, print_event, ('second',))
# 運行調度器
scheduler.run()
# 輸出結果
# START: 1532050215.3737717
# EVENT: 1532050217.3747234 first
# EVENT: 1532050218.375626 second

二、重疊事件

  • 調用 run() 塊執行所有的事件

  • 每個事件都在同一線程中運行,所以如果一個事件需要更長的時間,延遲事件將會有重疊。

  • 為了不丟失事件,延遲事件將會在之前事件運行完再被執行

  • 但一些延遲事件可能會晚于原本計劃的事件

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',))
# 事件無法在設想的3秒后執行,將會順延執行
scheduler.enter(3, 1, long_event, ('second',))
scheduler.run()
# 輸出結果
# START: 1532051082.8237524
# BEGIN EVENT : 1532051084.8392828 first
# FINISH EVENT: 1532051086.8475456 first
# BEGIN EVENT : 1532051086.8475456 second
# FINISH EVENT: 1532051088.8557353 second

三、事件優先級

如果多個事件是同一時間執行,通過設置他們的優先級值,用于確定順序運行

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()
# 輸出結果
# 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)
# 建立一個全局 線程計數器
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',))
# 開始一個線程執行事件
t = threading.Thread(target=scheduler.run)
t.start()
# 在主線程,取消第一個預定事件
scheduler.cancel(e1)
# 等待線程調度程序完成運行
t.join()
# 輸出結果
# START: 1532053265.5280123
# EVENT: 1532053268.528813 E2
# NOW: 1

五、其他方法

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

到此,相信大家對“python包中的sched事件調度器怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女