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改变日志(logging)存放位置的示例
Mar 27 Python
Python中文字符串截取问题
Jun 15 Python
将Python的Django框架与认证系统整合的方法
Jul 24 Python
python实现日常记账本小程序
Mar 10 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
python redis 批量设置过期key过程解析
Nov 26 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
打包PyQt5应用时的注意事项
Feb 14 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
Python修改DBF文件指定列
Dec 19 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
文件系统基本操作类
2006/11/23 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
Python端口扫描简单程序
2016/11/10 Python
Python学习小技巧总结
2018/06/10 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
成语的广告词
2014/03/19 职场文书
程序员求职信
2014/04/16 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
商务司机岗位职责
2015/04/10 职场文书
一个都不能少观后感
2015/06/04 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript