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中dictionary items()系列函数的用法实例
Aug 21 Python
Python单链表的简单实现方法
Sep 23 Python
python多重继承新算法C3介绍
Sep 28 Python
Python 异常处理的实例详解
Sep 11 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
python标记语句块使用方法总结
Aug 05 Python
wxPython实现带颜色的进度条
Nov 19 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
记录模型训练时loss值的变化情况
Jun 16 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
玩转虚拟域名◎+ .
2006/10/09 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
php四种定界符详解
2017/02/16 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
javascript Math.random()随机数函数
2009/11/04 Javascript
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
2017/03/23 jQuery
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
django解决跨域请求的问题详解
2019/01/20 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
Python super()函数使用及多重继承
2020/05/06 Python
python openssl模块安装及用法
2020/12/06 Python
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
工程师岗位职责
2013/11/08 职场文书
中层干部岗位职责
2013/12/18 职场文书
高中化学教学反思
2014/01/13 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
清明节寄语2015
2015/03/23 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
SQL写法--行行比较
2021/08/23 SQL Server
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL