1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
\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}[scheduler]{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}[scheduler]{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}[scheduler]{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}[scheduler]{empty}{}
Return true if the event queue is empty.
\end{methoddesc}
\begin{methoddesc}[scheduler]{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}
|