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():
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 。

(0)

相关推荐

  • python编写网页爬虫脚本并实现APScheduler调度

    前段时间自学了python,作为新手就想着自己写个东西能练习一下,了解到python编写爬虫脚本非常方便,且最近又学习了MongoDB相关的知识,万事具备只欠东风. 程序的需求是这样的,爬虫爬的页面是京东的电子书网站页面,每天会更新一些免费的电子书,爬虫会把每天更新的免费的书名以第一时间通过邮件发给我,通知我去下载. 一.编写思路: 1.爬虫脚本获取当日免费书籍信息 2.把获取到的书籍信息与数据库中的已有信息作比较,如果书籍存在不做任何操作,书籍不存在,执行插入数据库的操作,把数据的信息存入Mo

  • 详解python调度框架APScheduler使用

    最近在研究python调度框架APScheduler使用的路上,那么今天也算个学习笔记吧! # coding=utf-8 """ Demonstrates how to use the background scheduler to schedule a job that executes on 3 second intervals. """ from datetime import datetime import time import os

  • Python标准库sched模块使用指南

    事件调度 sched 模块内容很简单,只定义了一个类.它用来最为一个通用的事件调度模块. class sched.scheduler(timefunc, delayfunc) 这个类定义了调度事件的通用接口,它需要外部传入两个参数, timefunc 是一个没有参数的返回时间类型数字的函数(常用使用的如time模块里面的time), delayfunc 应该是一个需要一个参数来调用.与timefunc的输出兼容.并且作用为延迟多个时间单位的函数(常用的如time模块的sleep). 下面是一个列

  • python标准库OS模块详解

    python标准库OS模块简介 os就是"operating system"的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口.通过使用os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性.如果该模块中相关功能出错,会抛出OSError异常或其子类异常. 注意 如果是读写文件的话,建议使用内置函数open(): 如果是路径相关的操作,建议使用os的子模块os.path: 如果要逐行读取多个文件,建议使用fileinput模

  • python标准库OS模块函数列表与实例全解

    Python OS模块库详解 os就是"operating system"的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口.通过使用os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性.如果该模块中相关功能出错,会抛出OSError异常或其子类异常. 注意 如果是读写文件的话,建议使用内置函数open(): 如果是路径相关的操作,建议使用os的子模块os.path: 如果要逐行读取多个文件,建议使用fileinput模块

  • Python标准库uuid模块(生成唯一标识)详解

    目录 UUID格式组成 Python 中的uuid 模块 uuid1() 中的getnode() UUID实际应用 UUID 的劣势 参考资料: 总结 UUID (Universally Unique Identifier,通用唯一标识)是一个128位的用于计算机系统中以识别信息的数目,虽然生成UUID的概率不为零,但是无限接近零,因此可以忽略不记,如此一来,每个人都可以建立不与其他人冲突的UUID. UUID格式组成 规范的文本中,UUID的十六个八位字节标识位32个十六进制(基数16)数字,

  • 代码解析python标准库logging模块

    目录 问题1:如何获取caller的(文件名,行号,函数名)? findCaller内容如下: currentframe函数的定义: 问题2: Logger对象的层级,父子关系如何实现的? Manager的getLogger()定义如下: 问题1:如何获取caller的(文件名,行号,函数名)? 当新增一条log记录时,最终将调用Logger类的_log方法,这个方法首先会创建一个LogRecord对象.LogRecord对象需要(filename, lineno, funcname)参数信息.

  • python标准库压缩包模块zipfile和tarfile详解(常用标准库)

    目录 常用的标准库 zip格式 ZipFile参数说明 操作含义 压缩方法 常用方法 tar包 和 gz.bz2.xz格式 删除压缩包中的文件 常用的标准库 在我们常用的系统windows和Linux系统中有很多支持的压缩包格式,包括但不限于以下种类:rar.zip.tar,以下的标准库的作用就是用于压缩解压缩其中一些格式的压缩包. zip格式 import zipfile zipfile模块操作压缩包使用ZipFile类进行操作,使用方法和open的使用方法很相似,也是使用r.w.x.a四种操

  • python标准库random模块处理随机数

    目录 前言 1. 常用函数 2. 不常用函数 3. 使用示例 3.1 生成随机密码 前言 random模块实现了各种分布的伪随机数生成器. 伪随机数:人类使用算法等方式,以一个基准(也被称为种子,常用的是时间戳)来构造一系列数字,这些数字的特性符合人们所理解的随机数.一旦算法和种子都确定,产生的随机数序列也是确定的,所以称为伪随机数. 1. 常用函数 常用函数 说明 random.seed(a) 设置初始化随机种子,可输出相同随机数序列:a取整数或浮点数,不设置时默认以系统时间为种子 rando

  • 一篇文章带你了解python标准库--random模块

    目录 1. random库基本介绍 2. random库概述 2.1 基本随机函数 2.2 扩展随机函数 3. 随机数函数的使用 4. 实例 总结 1. random库基本介绍 Random库时使用随机数的python标准库 伪随机数:采用梅森旋转算法生成的(伪)随机序列中的元素 Random库主要用于生成随机数 使用random库:import random 2. random库概述 Random库包含两类函数,常用共8个 基本随机函数:seed() random() 扩展随机函数:randi

  • 一篇文章带你了解python标准库--os模块

    目录 1. os库基本介绍 2. os库之路径操作 3. os库之进程管理 4. os库之环境参数 5. 案例 总结 目前,计算机上主流的操作系统有Windows.Unix.Mac OS等,os模块为多操作系统的访问提供了相关功能的支持,涉及对文件相关操作功能的实现,系统访问path路径的操作,shell命令行操作,Linux扩展属性的操作,流程管理,CPU等硬件相关信息的获取,基于操作系统的真正的随机数的操作及相关的一些系统常量进行介绍. 1. os库基本介绍 Os库提供通用的.基本的操作系统

  • Python标准库defaultdict模块使用示例

    Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会带来很多的便利,多看看很有好处. defaultdict是其中一个方法,就是给字典value元素添加默认类型,之前看到过但是没注意怎么使用,今天特地瞅了瞅. 首先是各大文章介绍的第一个例子: 复制代码 代码如下: import collections as coll    def default_factory():      return 'default value'    d =

随机推荐