Python标准库之sched模块介绍
sched——通用时间调度器
sched模块实现了一个通用事件调度器,在调度器类使用一个延迟函数等待特定的时间,执行任务。同时支持多线程应用程序,在每个任务执行后会立刻调用延时函数,以确保其他线程也能执行。
一、延迟运行事件
在一个延迟或规定时间之后执行事件,需要采用enter()方法,包含4个参数:
间隔时间(具体值决定与delayfunc, 这里为秒)优先级(两个事件在同一时间到达的情况)调用的函数函数参数
例子:
import sched
import time #生成调度器
scheduler = sched.scheduler(time.time, time.sleep) def print_event(name):
print ('EVENT:', time.time(), name) print ('START:', time.time()) #分别设置在执行后2秒、3秒之后执行调用函数
scheduler.enter(2, 1, print_event, ('first',))
scheduler.enter(3, 1, print_event, ('second',)) #运行调度器
scheduler.run()
输出结果:
START: 1532050215.3737717
EVENT: 1532050217.3747234 first
EVENT: 1532050218.375626 second
二、重叠事件
调用run()块执行所有的事件。每个事件都在同一线程中运行,所以如果一个事件需要更长的时间,延迟事件将会有重叠。为了不丢失事件,延迟事件将会在之前事件运行完再被执行,但一些延迟事件可能会晚于原本计划的事件。
例子:
import sched
import time scheduler = sched.scheduler(time.time, time.sleep) def long_event(name):
print('BEGIN EVENT :', time.time(), name)
time.sleep(2)
print('FINISH EVENT:', time.time(), name) print('START:', time.time())
scheduler.enter(2, 1, long_event, ('first',)) #事件无法在设想的3秒后执行,将会顺延执行
scheduler.enter(3, 1, long_event, ('second',)) scheduler.run()
输出结果:
START: 1532051082.8237524
BEGIN EVENT : 1532051084.8392828 first
FINISH EVENT: 1532051086.8475456 first
BEGIN EVENT : 1532051086.8475456 second
FINISH EVENT: 1532051088.8557353 second
三、事件优先级
如果多个事件是同一时间执行,通过设置他们的优先级值,用于确定顺序运行
例子:
import sched
import time scheduler = sched.scheduler(time.time, time.sleep) def print_event(name):
print('EVENT:', time.time(), name) now = time.time()
print('START:', now)
scheduler.enterabs(now+2, 2, print_event, ('first',))
scheduler.enterabs(now+2, 1, print_event, ('second',)) scheduler.run()
输出结果:
START: 1532052567.6057265
EVENT: 1532052569.621258 second
EVENT: 1532052569.621258 first
四、取消事件
利用enter()和enterabs()返回一个引用事件用来取消它。
例子:
import sched
import threading
import time scheduler = sched.scheduler(time.time, time.sleep) #建立一个全局 线程计数器
counter = 0 def increment_counter(name):
global counter
print('EVENT:', time.time(), name)
counter += 1
print('NOW:', counter) print('START:', time.time())
e1 = scheduler.enter(2, 1, increment_counter, ('E1',))
e2 = scheduler.enter(3, 1, increment_counter, ('E2',)) # 开始一个线程执行事件
t = threading.Thread(target=scheduler.run)
t.start() # 在主线程,取消第一个预定事件
scheduler.cancel(e1) # 等待线程调度程序完成运行
t.join()
输出结果:
START: 1532053265.5280123
EVENT: 1532053268.528813 E2
NOW: 1
除了上面介绍的scheduler方法,还有一些其他方法:
scheduler.empty()
判断队列是否为空 scheduler.queue
只读属性,返回一个即将到达的事件列表(按到达事件排序),每个事件都是有 time 、 priority 、 action 、 argument 组成的 namedtuple 。
参考来源:https://pymotw.com/2/sched/index.html
Python标准库之sched模块介绍的更多相关文章
- (转)python标准库中socket模块详解
python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...
- Python标准库之Sys模块使用详解
sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sy ...
- Python标准库之subprocess模块
运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序.在Python中,我们通过标准库中的subprocess ...
- Python标准库之核心模块学习记录
内建函数和异常 包括__builtin__模块和exceptions模块 操作系统接口模块 包括提供文件和进程处理功能的os模块,提供平台独立的文件名处理(分拆目录名,文件名,后缀等)的os.path ...
- python标准库之random模块
Python中的random模块用于生成随机数. 下面具体介绍random模块的功能: 1.random.random() #用于生成一个0到1的 随机浮点数:0<= n < 1.0 1 ...
- Python标准库之logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- python标准库:csv 模块
原文地址:http://www.bugingcode.com/blog/python_csv.html csv 模块被用来读取CSV格式(用逗号分割数值)的数据文件,CSV格式的文件经常在微软的Exc ...
- Python标准库之os模块
1.删除和重命名文件 import os import string def replace(file, search_for, replace_with): # replace strings in ...
- python - 标准库:subprocess模块
subprocess的目的就是启动一个新的进程并且与之通信. subprocess模块中只定义了一个类: Popen. subprocess.Popen(args, bufsize=0, execut ...
随机推荐
- Visual Studio2019安装步骤
学校使用的版本是2012版本,而现在讲的版本是2019版本,差别不大,个人认为2019更能胜任学习任务. 另外VS2019是完全免费的,版本越高越好了!毕竟C++都出了C++20对吧. Step 1: ...
- JAVA基础知识|Executors提供的四种线程池
一.Thread与Executors 开启新的线程,我们经常会采用如下方法: Thread thread =new Thread(new Runnable() { @Override public v ...
- GO 类型断言
在Go语言中,我们可以使用type switch语句查询接口变量的真实数据类型,语法如下: switch x.(type) { // cases } x必须是接口类型. 来看一个详细的示例: type ...
- Apache 后台服务器(主要处理php及一些功能请求 如:中文url) Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求) Lighttpd 图片服务器 总体来说,随着nginx功能得完善将使他成为今后web server得主流。
Apache 后台服务器(主要处理php及一些功能请求 如:中文url) Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求) Lighttpd 图片服务器 总体来说,随着ngi ...
- Tosca TestCases: Update all,Checkin all,Checkout,Checkout Tree
#记录一下TestCases Module 红框里面这几个button的功能 #Update all 从数据库里把别人最新checkin的东西给拽出来查看,也就是拿最新版本 #Checkin all ...
- jeecg使用心得
接触到jeecg框架是在去年,接触到了jeecg开源框架,此框架为企业级急速开发框架,不了解的可以百度下这类框架的,对于目前状态来说,此框架确实也满足了所需,此刻就开始接触jeecg框架,去年六七月份 ...
- IO流的标准处理代码
FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("aaa.t ...
- js 点击列表li,获得当前li的id
html <ul id="demo"> <li id="li-1">li1</li> <li id="li- ...
- 005-tomcat日志体系
一.概述 首先了解java的日志体系 在JDK1.4后,sun公司增加了一个包为java.util.logging,简称为jul,用以对抗log4j. 后续还有很多日志门面方案,但是tomcat使用了 ...
- 5.7版本mysql查询报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:...this is incompatible with sql_mode=only_full_group_by
先瞧下日志: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException ...