8.8. sched-事件计划程序

源代码: Lib/sched.py


sched模块定义一个实现通用事件调度程序的类:

Example:

>>> 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, ())
...     s.enter(10, 1, print_time, ())
...     s.run()
...     print time.time()
...
>>> print_some_times()
930343690.257
From print_time 930343695.274
From print_time 930343700.273
930343700.276

在多线程环境中,scheduler类具有以下方面的限制:线程安全,无法在正在运行的调度程序中当前挂起的任务之前插入新任务以及保持主线程直到事件队列为空。相反,首选方法是改用threading.Timer类。

Example:

>>> 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)  # sleep while time-delay events execute
...     print time.time()
...
>>> print_some_times()
930343690.257
From print_time 930343695.274
From print_time 930343700.273
930343701.301

8.8.1. 调度程序对象

scheduler个实例具有以下方法和属性:

执行事件意味着执行action(*argument)。 * argument 必须是一个包含 action *参数的序列。

返回值是一个事件,可用于以后取消该事件(请参见cancel())。

如果一系列事件花费的时间比下一个事件发生之前的时间长,则调度程序将完全落后。不会删除任何事件;调用代码负责取消不再相关的事件。

2.6 版的新Function。

首页