如何使用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基础教程之基本内置数据类型介绍
Feb 20 Python
用Python制作检测Linux运行信息的工具的教程
Apr 01 Python
教大家使用Python SqlAlchemy
Feb 12 Python
Python Requests 基础入门
Apr 07 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
linux安装python修改默认python版本方法
Mar 31 Python
详解Python网络框架Django和Scrapy安装指南
Apr 01 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
python实现按关键字筛选日志文件
Dec 24 Python
python绘制高斯曲线
Feb 19 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python聊天室实例程序分享
2016/01/05 Python
Python多层装饰器用法实例分析
2018/02/09 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
python生成密码字典的方法
2018/07/06 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
Python实现播放和录制声音的功能
2020/08/12 Python
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
垃圾分类的活动方案
2014/08/15 职场文书
单位委托书格式范本
2014/09/29 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
培训通知书模板
2015/04/17 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python