python事件调度库sched
事件调度
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(a='default'):
print("From print_time", time.time(), a) def print_some_times():
print(time.time())
# 加入调度事件
s.enter(10, 1, print_time) #default
# 四个参数分别是:
# 间隔时间(具体值决定与delayfunc, 这里为秒);
# 优先级(两个事件在同一时间到达的情况);
# 触发的函数;
# 函数参数
s.enter(5, 2, print_time, argument=('positional',))#positional
s.enter(5, 1, print_time, kwargs={'a': 'keyword'})#keyword
# 运行调度
s.run()
print(time.time()) print_some_times()
#运行结果:先打印keyword,因为时间5秒,级别1高,然后是5秒级别2的positional,最后才是10秒的default
1556808770.1539588
From print_time 1556808775.1548176 keyword
From print_time 1556808775.1548176 positional
From print_time 1556808780.15493 default
1556808780.15493
在多线程场景中,会有线程安全问题,run()函数会阻塞主线程。官方建议使用threading.Timer类代替
import time
from threading import Timer def print_time(t):
print("From print_time", time.time(),t) def print_some_times():
print(time.time())
Timer(5, print_time,args=("5s",)).start()
Timer(10, print_time,args=("10s",)).start()
time.sleep(11) # 阻塞主线程,等待调度程序执行完毕,再执行后面内容
print(time.time()) print_some_times()
#执行结果
1556810008.0475848
From print_time 1556810013.0481865 5s
From print_time 1556810018.0492058 10s
1556810019.048601
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事件调度库sched的更多相关文章
- Python:标准库(包含下载地址及书本目录)
下载地址 英文版(文字版) 官方文档 The Python Standard Library <Python标准库>一书的目录 <python标准库> 译者序 序 前言 第1章 ...
- python 各种开源库
测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. 链接 sel ...
- python 协程库gevent学习--gevent数据结构及实战(三)
gevent学习系列第三章,前面两章分析了大量常用几个函数的源码以及实现原理.这一章重点偏向实战了,按照官方给出的gevent学习指南,我将依次分析官方给出的7个数据结构.以及给出几个相应使用他们的例 ...
- Python常用的库简单介绍一下
Python常用的库简单介绍一下fuzzywuzzy ,字符串模糊匹配. esmre ,正则表达式的加速器. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable ...
- Python的常用库
读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都 ...
- mysql事件调度器定时删除binlog
MySQL5.1.6起Mysql增加了事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由Linux操作系统的计划任务来执行的工作MySQL的事件调度器可以精确 ...
- Python多线程2:sched
sched模块提供了一个类的事件安排. scheduler类定义 class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep ...
- MySQL事件调度器event的使用
Q:假设,有一个需求,希望在某一个时刻系统调用一个begin end执行一下:十分钟以后执行一下begin end.亦或有一个需求,每个多长时间周期性执行begin end.那么这个时候该怎么办呢? ...
- python爬虫---selenium库的用法
python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...
随机推荐
- 46张PPT弄懂JVM、GC算法和性能调优!
来源:cnblogs.com/cyfonly/p/5807121.html 本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述. ...
- Java笔记之public、protected、default和private
参考链接:private public protected default区别 - Ma_xiao_shuai的博客 - CSDN博客
- Linux的s、t、i、a权限(转)
原文链接:http://blog.chinaunix.net/uid-712656-id-2678715.html 文件权限除了r.w.x外还有s.t.i.a权限: s:文件属主和组设置SUID和GU ...
- 【JZOJ3422】水叮当的舞步
description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上 ...
- chrome的驱动安装
首先找到对应的chromedriver,百度搜索,http://npm.taobao.org/mirrors/chromedriver/ 将下载好的chrome驱动解压,放在/usr/loacl/bi ...
- duilib库分析1.消息流程分析
看下CWindowWnd类与CPaintManagerUI类是咋进行消息分发的吧. 1. 先看下CPaintManagerUI类的MessageLoop函数: void CPaintManagerUI ...
- P2528 [SHOI2001]排序工作量之新任务
P2528 [SHOI2001]排序工作量之新任务 题目描述 假设我们将序列中第i件物品的参数定义为Ai,那么排序就是指将A1,…,An从小到大排序.若i<j且Ai>Aj,则<i ...
- VS2010-MFC(常用控件:组合框控件Combo Box)
转自:http://www.jizhuomi.com/software/189.html 上一节讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如, ...
- VS2010-MFC(常用控件:编辑框Edit Control)
转自:http://www.jizhuomi.com/software/181.html 编辑框(Edit Control)是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子 ...
- Jan&Feb 工作总结
一.工作任务: 熟悉dcbi项目(运维经分系统),完成指定需求. 熟悉bi项目(数据分析平台),完成指定需求. steel circus 主机游戏官网制作. 一拳超人游戏预注册页wap手机端制作. 二 ...