17.6. sched
- 事件调度程序¶
源代码: Lib / sched.py
sched
模块定义了实现通用事件调度器的类:
- class
sched.
scheduler
(timefunc=time.monotonic, delayfunc=time.sleep)¶ scheduler
类定义了调度事件的通用接口。它需要两个函数来实际处理“外部世界” - timefunc应该是可调用无参数,并返回一个数字(“时间”,无论任何单位)。如果time.monotonic不可用,则timefunc默认值为time.time。delayfunc函数应该可调用一个参数,与timefunc的输出兼容,并应延迟许多时间单位。在每个事件运行后,还将使用参数0
调用delayfunc,以允许其他线程有机会在多线程应用程序中运行。在版本3.3中更改: timefunc和delayfunc参数是可选的。
在版本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
17.6.1. Scheduler Objects¶
scheduler
实例具有以下方法和属性:
-
scheduler.
enterabs
(time, priority, action, argument=(), kwargs={})¶ 安排新活动。时间参数应为与传递给构造函数的timefunc函数的返回值兼容的数字类型。为相同时间安排的活动将按照优先级的顺序执行。
执行事件意味着执行
action(* argument, ** kwargs)
。参数是包含动作的位置参数的序列。kwargs是一个包含动作的关键字参数的字典。返回值是可用于稍后取消事件的事件(请参见
cancel()
)。在版本3.3中更改: 参数参数是可选的。
版本3.3中新增: kwargs参数已添加。
-
scheduler.
enter
(delay, priority, action, argument=(), kwargs={})¶ 安排延迟更多时间单位的事件。除了相对时间,其他参数,效果和返回值与
enterabs()
的相同。在版本3.3中更改: 参数参数是可选的。
版本3.3中新增: kwargs参数已添加。
-
scheduler.
cancel
(event)¶ 从队列中删除事件。如果事件不是队列中当前的事件,则此方法将引发
ValueError
。
-
scheduler.
empty
()¶ 如果事件队列为空,则返回true。
-
scheduler.
run
(blocking=True)¶ 运行所有计划的事件。这个方法将等待(使用传递给构造函数的
delayfunc()
函数)下一个事件,然后执行它,直到没有更多的调度事件。如果阻塞为false,则执行预定事件(由于到期最快(如果有)),然后返回调度程序中下一个调度的调用的最后期限(如果有)。
动作或delayfunc可引发异常。在任一情况下,调度程序将保持一致的状态并传播异常。如果action引发异常,则在未来调用
run()
时不会尝试该事件。如果事件序列比下一个事件之前可用的时间运行时间更长,则调度器将会落后。没有事件将被丢弃;调用代码负责取消不再相关的事件。
版本3.3中的新功能:添加了阻止参数。
-
scheduler.
queue
¶ 只读属性以它们将要运行的顺序返回即将到来的事件的列表。每个事件都显示为named tuple,其中包含以下字段:time,priority,action,argument,kwargs。