On this page
sched —事件调度程序
源代码: Lib/sched.py
sched模块定义一个实现通用事件调度程序的类:
-
- class *
sched.
scheduler
(* timefunc = time.monotonic , delayfunc = time.sleep *)
- scheduler类定义用于调度事件的通用接口。它实际上需要两个函数来处理“外部世界” — * timefunc *应该可以不带参数地调用,并返回一个数字(“ time”,以任何单位表示)。 * delayfunc 函数应该可以用一个参数调用,并与 timefunc 的输出兼容,并且应该延迟这么多时间单位。在每个事件运行之后,还将使用参数
0
调用 delayfunc *,以允许其他线程有机会在多线程应用程序中运行。
- class *
在版本 3.3 中更改:* timefunc 和 delayfunc *参数是可选的。
在版本 3.3 中更改:scheduler类可以在多线程环境中安全使用。
Example:
>>> 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 Objects
scheduler个实例具有以下方法和属性:
scheduler.
enterabs
(时间,优先级,动作,参数=(),* kwargs ={} *)- 安排新活动。 * time 参数应该是与传递给构造函数的 timefunc *函数的返回值兼容的数字类型。安排在相同时间的事件将按其优先级 Sequences 执行。较低的数字表示较高的优先级。
执行事件意味着执行action(*argument, **kwargs)
。 * argument 是一个序列,其中包含 action *的位置参数。 * kwargs 是一本字典,其中包含 action *的关键字参数。
返回值是一个事件,可用于以后取消该事件(请参见cancel())。
在版本 3.3 中更改:* argument *参数是可选的。
在版本 3.3 中更改:添加了* kwargs *参数。
scheduler.
enter
(* delay , priority , action , argument =(), kwargs ={} *)- 安排一个事件,以“延迟”更多时间单位。除了相对时间,其他参数,效果和返回值与enterabs()相同。
在版本 3.3 中更改:* argument *参数是可选的。
在版本 3.3 中更改:添加了* kwargs *参数。
scheduler.
cancel
(* event *)- 从队列中删除事件。如果* event *不是队列中当前的事件,则此方法将引发ValueError。
scheduler.
empty
( )- 如果事件队列为空,则返回
True
。
- 如果事件队列为空,则返回
scheduler.
run
(* blocking = True *)- 运行所有计划的事件。此方法将 await(使用传递给构造函数的
delayfunc()
函数)下一个事件,然后执行它,依此类推,直到不再有计划的事件为止。
- 运行所有计划的事件。此方法将 await(使用传递给构造函数的
如果* blocking *为 false,则执行计划事件,因为该事件将很快到期(如果有),然后在计划程序中返回下一个计划调用的截止时间(如果有)。
- action 或 delayfunc 均可引发异常。无论哪种情况,调度程序都将保持一致的状态并传播异常。如果 action *引发了异常,则将来的对run()的调用将不会try该事件。
如果一系列事件花费的时间比下一个事件发生之前的时间长,则调度程序将完全落后。不会删除任何事件;调用代码负责取消不再相关的事件。
在版本 3.3 中更改:添加了* blocking *参数。
scheduler.
queue
- 只读属性,按运行 Sequences 返回即将发生的事件的列表。每个事件都显示为named tuple,其中包含以下字段:时间,优先级,操作,参数,kwargs。