Python标准库sched模块使用指南
作者:j_hao104 发布时间:2022-09-20 12:19:06
事件调度
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 。
来源:http://www.cnblogs.com/jhao/p/7123692.html


猜你喜欢
- Python中有许多方便的库可以用来进行数据处理,尤其是Numpy和Pandas,再搭配matplot画图专用模块,功能十分强大。CSV(C
- 前言:文件处理是任何 Web 应用程序的重要组成部分。Python 有几个用于创建、读取、更新和删除文件的函数。1.文件处理在 Python
- 表空间概述Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle中信息存储的最
- 1 以下代码的输出结果为:print(round(-3.6))A.-4B.-4.0C.-3D. -3.02 以下代码的输出结果为(Pytho
- 本文实例讲述了python简单获取数组元素个数的方法。分享给大家供大家参考。具体如下:mySeq = [1,2,3,4,5] p
- 简介Blade 是 Laravel 所提供的一个简单且强大的模板引擎。相较于其它知名的 PHP 模板引擎,Blade 并不会限制你必须得在视
- 前言对MySQL有研究的读者,可能会发现MySQL更新很快,在安装方式上,MySQL提供了两种经典安装方式:解压式和一键式,虽然是两种安装方
- 一、实现原理其实实现原理很简单,我们的pptx文件其实是一个压缩包。我们可以直接修改pptx文件的后缀,改成zip然后解压,比如下面这个:这
- 在做数据库备份和还原数据库的时候出现"错误2812:未能找到存储过程’master.dbo.xp_fileexist’"
- 本文实例讲述了Python使用matplotlib绘制余弦的散点图。分享给大家供大家参考,具体如下:一 代码import numpy as
- 这篇文章我们来讲讲如何在python使用bs4模块返回值中正确使用find和find_all来取值。我们先来看看find函数在两种场景使用:
- 查看系统原有Python注:可以将python指向python3,但必须修改一些命令如yum的配置,不然会报错。安装依赖yum instal
- 使用Python的rename()函数重命名文件时出现问题,提示 WindowsError: [Error 2] 错误,最初代码如下:def
- 前言本文主要记录python下音频常用的操作,以.wav格式文件为例。其实网上有很多现成的音频工具包,如果仅仅调用,工具包是更方便的。更多p
- 一、错误提示:用户登录失败,该用户与可信SQL Server连接无关联 错误18452原因是远程登录没配置好,配置方法如下:1:开启SQL2
- 例如,在使用 SQLCMD 实用工具连接到 SQL Server 时收到以下错误消息: Sqlcmd:错误:Microsoft SQL Na
- 我的风格,废话不多说了,直接给大家贴代码了,并在一些难点上给大家附了注释,具体代码如下所示:#!/usr/bin/env python#-*
- 现代网络应用Web APP或大型网站的后台一般只有一个,然后客户端却是各种各样的(iOS, android, 浏览器),
- 主要知识点涉及if选择结构判断语句、数组的定义、定时器、清除定时器、日期对象的使用。1.HTML结构<!DOCTYPE html>
- python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。“一行代