如何使用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访问MySQL封装的常用类实例
Nov 11 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
linux下python使用sendmail发送邮件
May 22 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
Nov 07 Python
Python3实现zip分卷压缩过程解析
Oct 09 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
Selenium环境变量配置(火狐浏览器)及验证实现
Dec 07 Python
python 爬取小说并下载的示例
Dec 07 Python
Python MNIST手写体识别详解与试练
Nov 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 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
js判断游览器类型及版本号的代码
2014/05/11 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Python如何用filter函数筛选数据
2020/03/05 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
教师档案管理制度
2014/01/23 职场文书
红色旅游心得体会
2014/09/03 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书