如何使用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代码
Mar 13 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
Python基于whois模块简单识别网站域名及所有者的方法
Apr 23 Python
CentOS7安装Python3的教程详解
Apr 10 Python
python 中的列表生成式、生成器表达式、模块导入
Jun 19 Python
python logging日志模块原理及操作解析
Oct 12 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 Python
Python中包的用法及安装
Feb 11 Python
python 递归相关知识总结
Mar 03 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 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实现统计邮件大小的方法
2013/08/06 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
javascript常见操作汇总
2014/09/03 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
python中异常捕获方法详解
2017/03/03 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Python实现代码统计工具
2019/09/19 Python
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
XML文档面试题
2015/08/05 面试题
实习自我鉴定
2013/12/15 职场文书
文明教师事迹材料
2014/01/16 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
《我爱祖国》演讲稿1000字
2014/09/26 职场文书
PHP策略模式写法
2021/04/01 PHP