scheduler instances have the following methods:
Executing the event means executing apply(action,
argument)
. argument must be a tuple holding the
parameters for action.
Return value is an event which may be used for later cancellation of the event (see cancel()).
Either action or delayfunc can raise an exception. In either case, the scheduler will maintain a consistent state and propagate the exception. If an exception is raised by action, the event will not be attempted in future calls to run().
If a sequence of events takes longer to run than the time available before the next event, the scheduler will simply fall behind. No events will be dropped; the calling code is responsible for cancelling events which are no longer pertinent.