Python标准库sched模块使用指南


Posted in Python onJuly 06, 2017

事件调度

sched 模块内容很简单,只定义了一个类。它用来最为一个通用的事件调度模块。

class sched.scheduler(timefunc, delayfunc) 这个类定义了调度事件的通用接口,它需要外部传入两个参数, timefunc 是一个没有参数的返回时间类型数字的函数(常用使用的如time模块里面的time), delayfunc 应该是一个需要一个参数来调用、与timefunc的输出兼容、并且作用为延迟多个时间单位的函数(常用的如time模块的sleep)。

下面是一个列子:

import sched, time

s = sched.scheduler(time.time, time.sleep) # 生成调度器

def print_time():
print "From print_time", time.time()

def print_some_times():
print time.time()
s.enter(5, 1, print_time, ()) 
# 加入调度事件
# 四个参数分别是:
# 间隔事件(具体值决定与delayfunc, 这里为秒);
# 优先级(两个事件在同一时间到达的情况);
# 触发的函数;
# 函数参数;
s.enter(10, 1, print_time, ())

# 运行
s.run()
print time.time()

if __name__ == '__main__':
print_some_times()

看到的输出结果,隔5秒中执行第一个事件,隔10秒后执行第二个事件:

1499259731.99
From print_time 1499259736.99
From print_time 1499259741.99
1499259741.99

在多线程场景中,会有线程安全问题,run()函数会阻塞主线程。官方建议使用 threading.Timer 类代替:

import time
from threading import Timer

def print_time():
print "From print_time", time.time()

def print_some_times():
print time.time()
Timer(5, print_time, ()).start()
Timer(10, print_time, ()).start()
time.sleep(11) # 阻塞主线程,等待调度程序执行完毕,再执行后面内容
print time.time()

if __name__ == '__main__':
print_some_times()

Scheduler对象方法

scheduler对象拥有下面这些方法或属性:

scheduler.enterabs(time, priority, action, argument)

加入一个事件, time 参数应该是一个与传递给构造函数的 timefunc 函数的返回值相兼容的数值类型。在同一时间到达的事件将按照 priority 顺序执行。

执行事件其实就是执行 action(argument) 。argument必须是一个包含 action 参数的序列。

返回值是一个事件,它可以用于稍后取消事件(请参见 cancel() )。

scheduler.enter(delay, priority, action, argument)

安排一个事件来延迟 delay 个时间单位。除了时间外,其他参数、含义和返回值与 enterabs() 的值相同。其实内部 enterabs 就是用来被 enter 调用。

scheduler.cancel(event)

从队列中删除事件。如果事件不是当前队列中的事件,则该方法将跑出一个 ValueError 。

scheduler.empty()

判断队列是否为空。

scheduler.run()

运行所有预定的事件。这个函数将等待(使用传递给构造函数的 delayfunc() 函数),然后执行事件,直到不再有预定的事件。

任何 action 或 delayfunc 都可以引发异常。在这两种情况下,调度器将保持一个一致的状态并传播异常。如果一个异常是由 action 引起的,就不会再继续执行 run() 。

scheduler.queue

只读属性,返回一个即将到达的事件列表(按到达事件排序),每个事件都是有 time 、 priority 、 action 、 argument 组成的 namedtuple 。

Python 相关文章推荐
python批量导出导入MySQL用户的方法
Nov 15 Python
Python简单生成随机数的方法示例
Mar 31 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
Python实现的特征提取操作示例
Dec 03 Python
python读取图片任意范围区域
Jan 23 Python
浅谈Python中(&,|)和(and,or)之间的区别
Aug 07 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
python 瀑布线指标编写实例
Jun 03 Python
Pycharm调试程序技巧小结
Aug 08 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
Pandas自定义选项option设置
Jul 25 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 #Python
基于Python的关键字监控及告警
Jul 06 #Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 #Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 #Python
利用python实现简单的循环购物车功能示例代码
Jul 05 #Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 #Python
Python对象类型及其运算方法(详解)
Jul 05 #Python
You might like
mayfish 数据入库验证代码
2010/04/30 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
ext实现完整的登录代码
2008/08/08 Javascript
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
指针和引用有什么区别
2013/01/13 面试题
sealed修饰符是干什么的
2012/10/23 面试题
电话销售经理岗位职责
2013/12/07 职场文书
年会搞笑主持词
2014/03/27 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
教师远程研修感悟
2015/11/18 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
护士医德医风心得体会
2016/01/25 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书