如何使用python包中的sched事件调度器


Posted in Python onApril 30, 2022

一、延迟运行事件

  • 在一个延迟或规定时间之后执行事件,需要采用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 事件调度器教程的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
利用python求相邻数的方法示例
Aug 18 Python
Python三级菜单的实例
Sep 13 Python
Python多继承顺序实例分析
May 26 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
Python如何计算语句执行时间
Nov 22 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
Nov 28 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
浅谈keras.callbacks设置模型保存策略
Jun 18 Python
python利用opencv保存、播放视频
Nov 02 Python
python 学习GCN图卷积神经网络
May 11 Python
详解OpenCV获取高动态范围(HDR)成像
详解OpenCV曝光融合
python使用shell脚本创建kafka连接器
Apr 29 #Python
python中pycryto实现数据加密
Apr 29 #Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 #Python
Python如何让字典保持有序排列
Apr 29 #Python
Python按顺序遍历并读取文件夹中文件
Apr 29 #Python
You might like
使用PHP实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
php自动载入类用法实例分析
2016/06/24 PHP
详解php命令注入攻击
2019/04/06 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
Django实现分页显示效果
2019/10/31 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
python实现简单的购物程序代码实例
2020/03/03 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
有模特经验的简历自我评价
2013/09/19 职场文书
甲方资料员岗位职责
2013/12/13 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
国王的演讲观后感
2015/06/03 职场文书
小平您好观后感
2015/06/09 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis