如何使用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 装饰器功能以及函数参数使用介绍
Jan 27 Python
Python的另外几种语言实现
Jan 29 Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 Python
Python学习思维导图(必看篇)
Jun 26 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
Python编程实现tail-n查看日志文件的方法
Jul 08 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
python图片二值化提高识别率代码实例
Aug 24 Python
妙用itchat! python实现久坐提醒功能
Nov 25 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
Python3爬虫中Ajax的用法
Jul 10 Python
PyQt5通过信号实现MVC的示例
Feb 06 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
改造一台复古桌面收音机
2021/03/02 无线电
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
Python 自由定制表格的实现示例
2020/03/20 Python
python 如何设置守护进程
2020/10/29 Python
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
秋季运动会加油稿200字
2014/01/11 职场文书
新学期家长寄语
2014/01/19 职场文书
数据保密承诺书
2014/06/03 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
民主生活会对照检查材料
2014/09/22 职场文书