– 事件调度程序 – 并发执行(Python教程)(参考资料)
sched
– 事件调度程序
源代码: Lib / sched.py
- class
sched.
scheduler
(timefunc=time.monotonic, delayfunc=time.sleep) -
scheduler
class定义了一个调度事件的通用接口。它需要两个函数来实际处理“外部世界” – timefunc应该可以不带参数调用,并返回一个数字(“时间”,任何单位)。如果time.monotonic不可用,则timefunc默认为time.time。delayfunc函数应该可以使用one//gument调用,与timefunc的输出兼容,并且应该延迟多次单位。delayfunc也会被调用0
运行eachevent后允许其他线程有机会在多线程应用程序中运行.改版3.3:timefunc和delayfunc参数是可选的.
在版本3.3中更改:
scheduler
类可以安全地用于multi-threadedenvironments中.
示例:
>>> 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.257From print_time 930343695.274 positionalFrom print_time 930343695.275 keywordFrom print_time 930343700.273 default930343700.276
Scheduler对象
scheduler
实例具有以下方法和属性:
scheduler.
enterabs
(time, priority, action, argument=(), kwargs={})-
安排新活动。time参数应该是一个数字类型,与传递给构造函数的timefunc函数的返回值兼容。为同一个time将按priority的顺序执行。较小的数字表示较高的优先级.
执行事件意味着执行
action(*argument, **kwargs)
.argument是一个包含action.kwargs是一个包含action.关键字参数的字典。返回值是一个事件,可以用于以后取消事件(参见
cancel()
).更改版本3.3:argument参数是可选的.
新版本3.3:kwargs参数已添加.
scheduler.
enter
(delay, priority, action, argument=(), kwargs={})-
计划事件delay更多时间单位。除了相对时间外,其他参数,效果和返回值与
enterabs()
.相同。版本3.3中更改:argument参数是可选的.
版本3.3中新增:kwargs参数已添加.
scheduler.
cancel
(event)-
从队列中移除事件。如果event不是当前的事件,这个方法会引发
ValueError
.
scheduler.
empty
()-
如果事件队列为空,则返回true。
scheduler.
run
(blocking=True)-
运行所有预定的事件。这个方法会等待(使用
delayfunc()
传递给构造函数的函数)用于下一个事件,然后执行它,直到没有更多的预定事件.如果blocking是假执行预定的事件,因为最快到期(如果有的话)然后返回调度程序中的下一个预定呼叫的截止日期(如果有的话).
要么action或delayfunc可以提出例外。在任何一种情况下,计划程序都将保持一致状态并传播异常。如果action,将来的召唤活动将不会尝试
run()
.如果一系列事件的运行时间比下一个事件之前的可用时间长,那么调度程序将完全落后。不会丢弃任何事件;调用代码负责取消不再存在的事件.
版本3.3中新增了blocking参数已添加.
scheduler.
queue
-
Read-only属性按照他们将要运行的顺序返回即将发生的事件列表。每个事件都显示为名为tuple ,其中包括以下字段:时间,优先级,动作,参数,kwargs。