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浅拷贝与深拷贝用法实例
May 09 Python
在类Unix系统上开始Python3编程入门
Aug 20 Python
Python实现网站注册验证码生成类
Jun 08 Python
python中reload(module)的用法示例详解
Sep 15 Python
python3操作微信itchat实现发送图片
Feb 24 Python
一百行python代码将图片转成字符画
Feb 19 Python
Python数据预处理之数据规范化(归一化)示例
Jan 08 Python
用Python将结果保存为xlsx的方法
Jan 28 Python
python实现两个字典合并,两个list合并
Dec 02 Python
Python处理PDF与CDF实例
Feb 26 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
简单谈谈Python面向对象的相关知识
Jun 28 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
PHP开发大型项目的一点经验
2006/10/09 PHP
用PHP产生动态的影像图
2006/10/09 PHP
PHP HTML代码串 截取实现代码
2009/06/29 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
Python实现的下载网页源码功能示例
2017/06/13 Python
python学生信息管理系统
2018/03/13 Python
Python中的asyncio代码详解
2019/06/10 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
python sleep和wait对比总结
2021/02/03 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
在什么时候需要使用"常引用"
2015/12/31 面试题
某公司.Net方向面试题
2014/04/24 面试题
大学毕业寄语大全
2014/04/10 职场文书
环保标语口号
2014/06/13 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
Java 关于String字符串原理上的问题
2022/04/07 Java/Android