如何使用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系列之教你如何根据图片生成字符画
May 23 Python
Python使用MONGODB入门实例
May 11 Python
5种Python单例模式的实现方式
Jan 14 Python
python 美化输出信息的实例
Oct 15 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
Python笔记之观察者模式
Nov 20 Python
Python中os模块功能与用法详解
Feb 26 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
Python常用模块函数代码汇总解析
Aug 31 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 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将字符分解为多个字符串的方法
2014/11/22 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
前端性能优化及技巧
2016/05/06 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
Linux下Python获取IP地址的代码
2014/11/30 Python
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
母亲节演讲稿范文
2014/01/02 职场文书
学前班评语大全
2014/05/04 职场文书
安全负责人任命书
2014/06/06 职场文书
低碳环保口号
2014/06/12 职场文书
校本教研活动总结
2014/07/01 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
Python之matplotlib绘制折线图
2022/04/13 Python
Java存储没有重复元素的数组
2022/04/29 Java/Android