如何使用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 内置函数filter
Jun 01 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 Python
python的scipy实现插值的示例代码
Nov 12 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
Python随机数函数代码实例解析
Feb 09 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
Python改变对象的字符串显示的方法
Aug 01 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 Python
python实现简单文件读写函数
Feb 25 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
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
jquery中this的使用说明
2010/09/06 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
angularJS开发注意事项
2018/05/26 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
公司道歉信范文
2014/01/09 职场文书
实习协议书范本
2014/04/22 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
整改报告怎么写
2014/11/06 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
Java移除无效括号的方法实现
2021/08/07 Java/Android
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis