如何使用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之一个免费的实验室
Sep 14 Python
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
python3爬取数据至mysql的方法
Jun 26 Python
Python实现模拟登录网易邮箱的方法示例
Jul 05 Python
python画一个玫瑰和一个爱心
Aug 18 Python
python绘制散点图并标记序号的方法
Dec 11 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
python由已知数组快速生成新数组的方法
Apr 08 Python
windows支持哪个版本的python
Jul 03 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
Python爬虫基础之爬虫的分类知识总结
May 13 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
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
python插入数据到列表的方法
2015/04/30 Python
python 重定向获取真实url的方法
2018/05/11 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
利用python爬取有道词典的方法
2020/12/08 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
前台接待的工作职责
2013/11/21 职场文书
学习党课思想汇报
2013/12/29 职场文书
大学生村官典型材料
2014/01/12 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
政协调研汇报材料
2014/08/15 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
单位考核聘任报告
2015/03/02 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书