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比较两个列表是否相等的方法
Jul 28 Python
Python实现图片转字符画的示例
Aug 22 Python
Python二叉树定义与遍历方法实例分析
May 25 Python
Python实现的简单计算器功能详解
Aug 25 Python
Python 列表去重去除空字符的例子
Jul 20 Python
Python 操作 ElasticSearch的完整代码
Aug 04 Python
对django的User模型和四种扩展/重写方法小结
Aug 17 Python
python可视化实现KNN算法
Oct 16 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Python urlopen()参数代码示例解析
Dec 10 Python
手把手教你实现PyTorch的MNIST数据集
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
IStream与TStream之间的相互转换
2008/08/01 PHP
php相当简单的分页类
2008/10/02 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
15个非常实用的JavaScript代码片段
2016/12/18 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
vue使用自定义指令实现拖拽
2021/01/29 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
介绍Python中的文档测试模块
2015/04/28 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
python类中super()和__init__()的区别
2016/10/18 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
解决Django中多条件查询的问题
2019/07/18 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
NumPy中的维度Axis详解
2019/11/26 Python
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
企业管理标语
2014/06/10 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
幼儿园感谢信
2015/01/21 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
施工安全保证书
2015/05/09 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang