事件调度

sched模块内容很简单,只定义了一个类。它用来最为一个通用的事件调度模块。

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

下面是一个列子:

importsched, time#生成调度器

s =sched.scheduler(time.time, time.sleep)def print_time(a='default'):print("From print_time", time.time(), a)defprint_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.1539588From print_time1556808775.1548176keyword

From print_time1556808775.1548176positional

From print_time1556808780.15493default1556808780.15493

在多线程场景中,会有线程安全问题,run()函数会阻塞主线程。官方建议使用threading.Timer类代替

importtimefrom threading importTimerdefprint_time(t):print("From print_time", time.time(),t)defprint_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.0475848From print_time1556810013.04818655s

From print_time1556810018.049205810s1556810019.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事件调度库sched相关推荐

  1. python事件调度库sched

    事件调度 sched模块内容很简单,只定义了一个类.它用来最为一个通用的事件调度模块. class sched.scheduler(timefunc, delayfunc)这个类定义了调度事件的通用接 ...

  2. python离散事件仿真库SimPy官方教程

    参考:SimPy Discrete event simulation for Python 建议先简单了解仿真原理:离散事件仿真原理DES 简单介绍 simpy的实现关键在于生成器的使用,通过例子说明 ...

  3. python sched_Python定时模块之sched

    一.sched模块 ----- 事件调度程序 sched模块定义了一个实现通用事件调度器的类:scheduler class sched.scheduler(timefunc=time.monoton ...

  4. python sched_python中的crontab ————sched标准库 | 学步园

    可以做计划任务,就是在指定的延时之后执行一段程序. sched.scheduler(timefunc, delayfunc) 接受两个参数,timefunc必须在没有参数的情况下也能调用,返回延时数字 ...

  5. Python事件调度器定时任务sched

    文章目录 简介 初试 解析 参考文献 简介 sched是Python的内置模块,用于事件调度,可在安全的在多线程环境中轻松实现定时任务. 但该方法会阻塞线程,直到所有被调度的任务都执行完成. 初试 i ...

  6. python sched_Python标准库之sched模块介绍

    sched--通用时间调度器 sched模块实现了一个通用事件调度器,在调度器类使用一个延迟函数等待特定的时间,执行任务.同时支持多线程应用程序,在每个任务执行后会立刻调用延时函数,以确保其他线程也能 ...

  7. Python 200个标准库汇总

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 文本 string:通用字符串操作 re:正则表达式操作 diff ...

  8. python常用标准库有哪些-Python 200个标准库汇总

    文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串 ...

  9. Python中级 —— 07标准库

    标准库学习 1. The Python Standard Library[https://docs.python.org/3.5/library/] ( 3.5.5 Documentation ) 1 ...

最新文章

  1. 操作系统学习:Linux0.12初始化详细流程-首个子进程
  2. 干货|全面理解无监督学习基础知识
  3. Amy Mcdonald - This is the Life
  4. Hadoop pipes编程
  5. CF1251F-Red-White Fence【NTT】
  6. LUGOU P3907 圈的异或
  7. 新基建东风下,程序员这样乘风破浪!
  8. 有关8086必须记住的几个数(持续更新)
  9. 转:SQL进阶之变量、事务、存储过程与触发器
  10. Mac系统Option键的妙用,能够极大提升你的效率
  11. centos php mysql 配置_CentOS系统中安装配置Apache+PHP+MySQL环境
  12. C#:Access数据库的连接、读取,字段的增加、删除、更新、查询操作
  13. usb驱动错误导致的键盘鼠标失灵
  14. 产品经理校招20道常见面试题:问题拆解与回答思路
  15. 植物大战僵尸修改植物攻击力
  16. 【d3】树图-各种效果集合(附效果图)
  17. 漫谈数据结构系列(一)之僧敲月下门
  18. Java 批量导出PPT为图片,并合并生成PDF
  19. 什么是CDN资质?什么情况需要办CDN牌照
  20. app上传到安卓各大市场

热门文章

  1. 微软:杀死那个曾经全球第一的浏览器
  2. 这里有个自学数据分析并拿到大厂offer的文科小姐姐
  3. 操作系统学习:进程、线程与Linux0.12初始化过程概述
  4. Django博客系统(博客保存)
  5. 【网络协议】TCP分段与IP分片
  6. XML,JOSN,YAML三种文件类型的区别
  7. 计算机的学生该怎么做?
  8. 收藏 | 多目标跟踪(MOT)入门
  9. 计算机视觉还能撑多久?
  10. 基于OpenCV实战:车牌检测