網站首頁 編程語言 正文
一、延遲運行事件
- 在一個延遲或規定時間之后執行事件,需要采用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
原文鏈接:https://www.cnblogs.com/autofelix/p/16209923.html
相關推薦
- 2022-03-18 處理Oracle監聽程序當前無法識別連接描述符中請求的服務異常(ORA-12514)_oracle
- 2022-07-17 絕對、相對導入以及包和常見內置模塊
- 2022-05-15 Element框架里日期選擇器限制時間,最多選31天
- 2023-07-09 【elementplus】body設置zoom后,el-table開啟show-overflow-t
- 2022-06-01 C#文件操作、讀取文件、Debug/Trace類用法_C#教程
- 2022-04-29 DataTable的AcceptChanges()和RejectChanges()方法介紹并實現Da
- 2022-11-11 Android利用Canvas類繪制圖形_Android
- 2022-05-25 version `GLIBC_2.18‘ not found
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支