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 相关文章推荐
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
使用Python编写vim插件的简单示例
Apr 17 Python
python实现折半查找和归并排序算法
Apr 14 Python
详解python的ORM中Pony用法
Feb 09 Python
python中字符串比较使用is、==和cmp()总结
Mar 18 Python
Python实现定时精度可调节的定时器
Apr 15 Python
Python3.5 处理文本txt,删除不需要的行方法
Dec 10 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
三个python爬虫项目实例代码
Dec 28 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 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
PHP获取当前页面URL函数实例
2014/10/22 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
使用python加密自己的密码
2015/08/04 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
python中如何进行连乘计算
2020/05/28 Python
详解Python yaml模块
2020/09/23 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
Viking比利时:购买办公用品
2019/10/30 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
先进个人总结范文
2015/02/15 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python
golang定时器
2022/04/14 Golang
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers