如何使用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实现随机密码字典生成器示例
Apr 09 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
对python中的argv和argc使用详解
Dec 15 Python
如何使用python把ppt转换成pdf
Jun 29 Python
python实现复制文件到指定目录
Oct 16 Python
pyinstaller还原python代码过程图解
Jan 08 Python
Python3搭建http服务器的实现代码
Feb 11 Python
jupyter notebook 的工作空间设置操作
Apr 20 Python
Python如何转换字符串大小写
Jun 04 Python
基于python获取本地时间并转换时间戳和日期格式
Oct 27 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将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
JS实现li标签的删除
2019/04/12 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python实现代码行数统计示例分享
2014/02/10 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
tensorboard显示空白的解决
2020/02/15 Python
新闻记者个人求职的自我评价
2013/11/28 职场文书
司机检讨书
2014/02/13 职场文书
英文自荐信常用句子
2014/03/26 职场文书
运动会口号8字
2014/06/07 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
法制教育主题班会
2015/08/13 职场文书
阿里云日志过滤器配置日志服务
2022/04/09 Servers