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的垃圾回收机制
Dec 17 Python
Python导入模块时遇到的错误分析
Aug 30 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
python指定写入文件时的编码格式方法
Jun 07 Python
python查看模块,对象的函数方法
Oct 16 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
Python读取YAML文件过程详解
Dec 30 Python
python实现查找所有程序的安装信息
Feb 18 Python
Python单元测试及unittest框架用法实例解析
Jul 09 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
python 还原梯度下降算法实现一维线性回归
Oct 22 Python
python实现马丁策略的实例详解
Jan 15 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
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
javascript prototype 原型链
2009/03/12 Javascript
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
pandas的相关系数与协方差实例
2019/12/27 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
python实现批量命名照片
2020/06/18 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
举例讲解Python装饰器
2020/12/24 Python
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
中介业务员岗位职责
2014/04/09 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
冰峪沟导游词
2015/02/09 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
小学信息技术教学反思
2016/02/16 职场文书
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏