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局域网ip扫描示例分享
Apr 03 Python
Python装饰器使用示例及实际应用例子
Mar 06 Python
python网络编程之文件下载实例分析
May 20 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
Python用csv写入文件_消除空余行的方法
Jul 06 Python
PyCharm+PySpark远程调试的环境配置的方法
Nov 29 Python
python zip()函数使用方法解析
Oct 31 Python
pandas 对group进行聚合的例子
Dec 27 Python
Python将字典转换为XML的方法
Aug 01 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
Python3接口性能测试实例代码
Jun 20 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
B2K与车机的中波PK
2021/03/02 无线电
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
Python中使用SAX解析xml实例
2014/11/21 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
超简单的Python HTTP服务
2019/07/22 Python
简单了解python协程的相关知识
2019/08/31 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
募捐倡议书
2014/04/14 职场文书
保护环境倡议书范文
2014/05/13 职场文书
社会实践的活动方案
2014/08/22 职场文书
综合管理员岗位职责
2015/02/11 职场文书
北京英语导游词
2015/02/12 职场文书
任命通知范文
2015/04/21 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
初中语文教学反思范文
2016/03/03 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS
MySql数据库 查询时间序列间隔
2022/05/11 MySQL