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模块介绍的更多相关文章

  1. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  2. Python标准库之Sys模块使用详解

    sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sy ...

  3. Python标准库之subprocess模块

    运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序.在Python中,我们通过标准库中的subprocess ...

  4. Python标准库之核心模块学习记录

    内建函数和异常 包括__builtin__模块和exceptions模块 操作系统接口模块 包括提供文件和进程处理功能的os模块,提供平台独立的文件名处理(分拆目录名,文件名,后缀等)的os.path ...

  5. python标准库之random模块

    Python中的random模块用于生成随机数. 下面具体介绍random模块的功能: 1.random.random() #用于生成一个0到1的 随机浮点数:0<= n < 1.0 1 ...

  6. Python标准库之logging模块

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  7. python标准库:csv 模块

    原文地址:http://www.bugingcode.com/blog/python_csv.html csv 模块被用来读取CSV格式(用逗号分割数值)的数据文件,CSV格式的文件经常在微软的Exc ...

  8. Python标准库之os模块

    1.删除和重命名文件 import os import string def replace(file, search_for, replace_with): # replace strings in ...

  9. python - 标准库:subprocess模块

    subprocess的目的就是启动一个新的进程并且与之通信. subprocess模块中只定义了一个类: Popen. subprocess.Popen(args, bufsize=0, execut ...

随机推荐

  1. 什么是IO流

    先看一段百度上的解释: 当然:如果你看不懂,那么你只需要记住下面3句话. 1. (1).我们知道,每个人家里喝的水都是从自来水厂来的,自来水厂的水又是从水源地来的, (2).水是通过水管来的. (3) ...

  2. Alpha项目冲刺! Day6-产出

    各个成员今日完成的任务 林恩:任务分工,博客撰写,了解安卓环境搭建 杨长元:安卓本地数据库 李震:了解聊天类app相关内容 胡彤:完善服务端 寇永明:研究测试代码 王浩:研究测试代码 李杰:研究测试代 ...

  3. CDH 安装的博客地址记录

    1. 集群环境配置 https://www.cnblogs.com/yinzhengjie/articles/11019333.html 2. 二进制方法安装 https://www.cnblogs. ...

  4. SQL-W3School-函数:SQL AVG() 函数

    ylbtech-SQL-W3School-函数:SQL AVG() 函数 1.返回顶部 1. 定义和用法 AVG 函数返回数值列的平均值.NULL 值不包括在计算中. SQL AVG() 语法 SEL ...

  5. 算法习题---4-4骰子涂色(UVa253)

    一:题目 分别对两个骰子的六个面涂色r-红 b-蓝 g-绿,通过转动骰子,看两个骰子是不是一样的涂色方法 (一)题目详解 题目规定了正方体的六个面的序号:从1-,按照这个需要提供涂色序列 (二)案例展 ...

  6. 123457123457#0#---------com.ppGame.SeaPuzzleGame73--前拼后广--宝宝海洋拼图pp

    com.ppGame.SeaPuzzleGame73--前拼后广--宝宝海洋拼图pp

  7. SpringCloud学习成长之十二 断路器监控

    在我的第四篇文章断路器讲述了如何使用断路器,并简单的介绍了下Hystrix Dashboard组件,这篇文章更加详细的介绍Hystrix Dashboard. 一.Hystrix Dashboard简 ...

  8. spark osx:WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform

    spark-env.sh文件中增加,确保${HADOOP_HOME}/lib/native目录下有libhadoop.so文件 export JAVA_LIBRARY_PATH=${HADOOP_HO ...

  9. ubuntu18.04安装chromium浏览器

    sudo add-apt-repository ppa:a-v-shkop/chromium sudo apt-get upate sudo apt-get install chromium-brow ...

  10. jQuery调用WCF

    jQuery要调用WCF,首先要创建service.svc服务文件,这里边需要注意: [ServiceContract(Namespace = "")] [AspNetCompat ...