| \section{\module{sched} --- |
| Event scheduler} |
| |
| % LaTeXed and enhanced from comments in file |
| |
| \declaremodule{standard}{sched} |
| \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} |
| \modulesynopsis{General purpose event scheduler.} |
| |
| The \module{sched} module defines a class which implements a general |
| purpose event scheduler:\index{event scheduling} |
| |
| \begin{classdesc}{scheduler}{timefunc, delayfunc} |
| The \class{scheduler} class defines a generic interface to scheduling |
| events. It needs two functions to actually deal with the ``outside world'' |
| --- \var{timefunc} should be callable without arguments, and return |
| a number (the ``time'', in any units whatsoever). The \var{delayfunc} |
| function should be callable with one argument, compatible with the output |
| of \var{timefunc}, and should delay that many time units. |
| \var{delayfunc} will also be called with the argument \code{0} after |
| each event is run to allow other threads an opportunity to run in |
| multi-threaded applications. |
| \end{classdesc} |
| |
| Example: |
| |
| \begin{verbatim} |
| >>> 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 |
| \end{verbatim} |
| |
| |
| \subsection{Scheduler Objects \label{scheduler-objects}} |
| |
| \class{scheduler} instances have the following methods: |
| |
| \begin{methoddesc}{enterabs}{time, priority, action, argument} |
| Schedule a new event. The \var{time} argument should be a numeric type |
| compatible with the return value of the \var{timefunc} function passed |
| to the constructor. Events scheduled for |
| the same \var{time} will be executed in the order of their |
| \var{priority}. |
| |
| Executing the event means executing |
| \code{\var{action}(*\var{argument})}. \var{argument} must be a |
| sequence holding the parameters for \var{action}. |
| |
| Return value is an event which may be used for later cancellation of |
| the event (see \method{cancel()}). |
| \end{methoddesc} |
| |
| \begin{methoddesc}{enter}{delay, priority, action, argument} |
| Schedule an event for \var{delay} more time units. Other then the |
| relative time, the other arguments, the effect and the return value |
| are the same as those for \method{enterabs()}. |
| \end{methoddesc} |
| |
| \begin{methoddesc}{cancel}{event} |
| Remove the event from the queue. If \var{event} is not an event |
| currently in the queue, this method will raise a |
| \exception{RuntimeError}. |
| \end{methoddesc} |
| |
| \begin{methoddesc}{empty}{} |
| Return true if the event queue is empty. |
| \end{methoddesc} |
| |
| \begin{methoddesc}{run}{} |
| Run all scheduled events. This function will wait |
| (using the \function{delayfunc} function passed to the constructor) |
| for the next event, then execute it and so on until there are no more |
| scheduled events. |
| |
| Either \var{action} or \var{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 \var{action}, |
| the event will not be attempted in future calls to \method{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 canceling |
| events which are no longer pertinent. |
| \end{methoddesc} |