sched
---事件调度程序¶
源代码: Lib/sched.py
这个 sched
模块定义了一个实现通用事件调度程序的类:
- class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)¶
这个
scheduler
类定义了调度事件的通用接口。实际处理“外部世界”需要两个功能-- 时间函数 应该可以不带参数地调用,并返回一个数字(“时间”,以任何单位表示)。这个 德拉芬克 函数应该可以用一个参数调用,与的输出兼容。 时间函数 并且应该延迟很多时间单位。 德拉芬克 也将用参数调用0
在每个事件运行之后,允许其他线程有机会在多线程应用程序中运行。在 3.3 版更改: 时间函数 和 德拉芬克 参数是可选的。
在 3.3 版更改:
scheduler
类可以在多线程环境中安全地使用。
例子::
>>> import sched, time
>>> s = sched.scheduler(time.time, time.sleep)
>>> def print_time(a='default'):
... print("From print_time", time.time(), a)
...
>>> def print_some_times():
... print(time.time())
... s.enter(10, 1, print_time)
... s.enter(5, 2, print_time, argument=('positional',))
... s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
... s.run()
... print(time.time())
...
>>> print_some_times()
930343690.257
From print_time 930343695.274 positional
From print_time 930343695.275 keyword
From print_time 930343700.273 default
930343700.276
调度程序对象¶
scheduler
实例具有以下方法和属性:
- scheduler.enterabs(time, priority, action, argument=(), kwargs={})¶
安排新活动。这个 time 参数应为与返回值兼容的数字类型 时间函数 传递给构造函数的函数。为相同事件安排的事件 time 将按以下顺序执行 优先 . 数字越小表示优先级越高。
执行事件意味着执行
action(*argument, **kwargs)
. 参数 是保存位置参数的序列 行动 . 关键字参数 是包含关键字参数的字典 行动 .返回值是一个事件,可用于以后取消该事件(请参见
cancel()
)在 3.3 版更改: 参数 参数是可选的。
在 3.3 版更改: 关键字参数 已添加参数。
- scheduler.enter(delay, priority, action, argument=(), kwargs={})¶
为安排活动 延迟 更多时间单位。除相对时间外,其他参数、效果和返回值与
enterabs()
.在 3.3 版更改: 参数 参数是可选的。
在 3.3 版更改: 关键字参数 已添加参数。
- scheduler.cancel(event)¶
从队列中删除事件。如果 事件 不是队列中的当前事件,此方法将引发
ValueError
.
- scheduler.empty()¶
返回
True
如果事件队列为空。
- scheduler.run(blocking=True)¶
运行所有计划的事件。此方法将等待(使用
delayfunc()
传递给构造函数的函数)用于下一个事件,然后执行它,依此类推,直到不再有计划的事件。如果 blocking 如果为false,则执行由于最快过期而导致的计划事件(如果有),然后返回计划程序中下一个计划调用的截止时间(如果有)。
要么 行动 或 德拉芬克 可以引发异常。在这两种情况下,调度程序都将保持一致的状态并传播异常。如果引发异常 行动 ,以后调用时将不会尝试此事件
run()
.如果一个事件序列的运行时间比下一个事件之前的可用时间长,调度程序就会落后。不会删除任何事件;调用代码负责取消不再相关的事件。
在 3.3 版更改: blocking 已添加参数。
- scheduler.queue¶
只读属性,返回即将发生的事件的列表(按其运行顺序)。每个事件显示为 named tuple 包含以下字段:时间、优先级、操作、参数、Kwargs。