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.
scheduler | class scheduler(timefunc,delayfunc)
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.
| cancel | s.cancel(event_token)
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.
| empty | s.empty( )
Returns true if s's queue is empty; otherwise, False.
| enterabs | s.enterabs(when,priority,func,args)
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.
| enter | s.enter(delay,priority,func,args)
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).
| run | s.run( )
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.
|
|