如何使用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发送email的3种方法
Apr 28 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
Python处理中文标点符号大集合
May 14 Python
python实现俄罗斯方块游戏
Mar 25 Python
使用python切片实现二维数组复制示例
Nov 26 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
Python列表切片常用操作实例解析
Dec 16 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Python如何实现远程方法调用
Aug 07 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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
利用PHP实现短域名互转
2013/07/05 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
Python标准库之sqlite3使用实例
2014/11/25 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
Python类属性的延迟计算
2016/10/22 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
python如何更新包
2020/06/11 Python
python如何从键盘获取输入实例
2020/06/18 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
高中语文教学反思
2014/01/16 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
人事局接收函
2015/01/31 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书