如何使用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 20 Python
详细介绍Python中的偏函数
Apr 27 Python
Python文件处理
Feb 29 Python
利用python爬取软考试题之ip自动代理
Mar 28 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
Python sorted函数详解(高级篇)
Sep 18 Python
对django2.0 关联表的必填on_delete参数的含义解析
Aug 09 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
详解Flask前后端分离项目案例
Jul 24 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与php MySQL 之间的关系
2009/07/17 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
请解释接口的显式实现有什么意义
2012/05/26 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
第二课堂活动总结
2014/05/07 职场文书
宣传稿格式范文
2015/07/23 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
施工现场安全管理制度
2015/08/05 职场文书
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL
python3中apply函数和lambda函数的使用详解
2022/02/28 Python
R9700摩机记
2022/04/05 无线电
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python