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 基础学习教程
Feb 08 Python
Python使用新浪微博API发送微博的例子
Apr 10 Python
python中list常用操作实例详解
Jun 03 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
python实现n个数中选出m个数的方法
Nov 13 Python
对python当中不在本路径的py文件的引用详解
Dec 15 Python
Python上下文管理器全实例详解
Nov 12 Python
Python partial函数原理及用法解析
Dec 11 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
Python如何读写二进制数组数据
Aug 01 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 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中的Base62类(适用于数值转字符串)
2013/08/12 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
10个简化PHP开发的工具
2014/12/25 PHP
php中异常处理方法小结
2015/01/09 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
遗传算法python版
2018/03/19 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
Python 下载及安装详细步骤
2019/11/04 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
2015年科协工作总结
2015/05/19 职场文书
护士心得体会范文
2016/01/25 职场文书
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android