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,sched模块
0
投稿

猜你喜欢

  • Opencv python 图片生成视频的方法示例

    2021-11-08 22:18:38
  • ASP使用xmlhttp调用WEBSERVICE文档

    2008-05-30 13:56:00
  • python面向对象多线程爬虫爬取搜狐页面的实例代码

    2021-11-27 21:49:39
  • 浅析Sql server锁,独占锁,共享锁,更新锁,乐观锁,悲观锁

    2024-01-14 01:53:11
  • 如何测试字符串的长度?

    2009-11-11 20:02:00
  • vue中v-for通过动态绑定class实现触发效果

    2024-04-09 10:45:21
  • PHP simplexml_load_file()函数讲解

    2023-06-03 23:16:56
  • pd.to_datetime中时间object转换datetime实例

    2021-09-23 19:22:15
  • python分析实现微信钉钉等软件多开分身

    2023-07-22 18:37:12
  • iscroll动态加载数据完美解决方法

    2024-04-10 13:59:01
  • JavaScript利用时间分片实现高性能渲染数据详解

    2024-04-29 13:24:26
  • Bootstrap table的使用方法

    2023-09-10 13:34:47
  • 微信小程序(微信应用号)开发工具0.9版安装详细教程

    2023-06-12 23:33:37
  • Django接受前端数据的几种方法总结

    2021-11-26 23:32:53
  • asp如何读取一个文件内容?

    2009-11-19 17:23:00
  • python函数常见关键字分享

    2022-06-17 04:31:55
  • javascript与jsp发送请求到servlet的几种方式实例

    2023-06-15 15:59:30
  • js实现一个日期联动下拉菜单

    2007-08-04 20:49:00
  • 详解Python中time()方法的使用的教程

    2022-10-07 16:28:23
  • mysql二进制日志文件恢复数据库

    2024-01-16 10:55:05
  • asp之家 网络编程 m.aspxhome.com