12.5. The sched Module
The sched module implements an event-scheduler, letting you easily deal, along a single thread of execution, with events that may be scheduled in either a "real" or a "simulated" time-scale. sched supplies a scheduler class.
An instance s of scheduler holds two functions to use for all time-related operations. timefunc is callable without arguments to get the current time instant (in any unit of measure); for example, you can pass time.time. delayfunc is callable with one argument (a time duration, in the same units as timefunc) to delay the current thread for that time; for example, you can pass time.sleep. scheduler calls delayfunc(0) after each event to give other threads a chance; this is compatible with time.sleep. By taking functions as arguments, scheduler lets you use whatever "simulated time" or "pseudotime" fits your application's needs.
A scheduler instance s supplies the following methods.
Removes an event from s's queue. event_token must be the result of a previous call to s.enter or s.enterabs, and the event must not yet have happened; otherwise, cancel raises RuntimeError.
Returns true if s's queue is empty; otherwise, False.
Schedules a future event (a callback to func(*args)) at time when. when is in the units used by the time functions of s. If several events are scheduled for the same time, s executes them in increasing order of priority. enterabs returns an event token t, which you may pass to s.cancel to cancel this event.
Like enterabs, except that delay is a relative time (different from the current instant), while enterabs's argument when is an absolute time (a future instant).
Runs all scheduled events. s.run loops until s.empty( ), using the delayfunc passed on s's initialization to wait for each scheduled event. If a callback func raises an exception, s propagates it, but s keeps its own state, removing the event from the schedule. If a callback func runs longer than the time available before the next scheduled event, s falls behind but keeps executing scheduled events in order, never dropping any. Call s.cancel to drop an event explicitly if that event is no longer of interest.