| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | \section{\module{sched} --- | 
					
						
							|  |  |  |          Event scheduler} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-04-03 20:13:55 +00:00
										 |  |  | % LaTeXed and enhanced from comments in file
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | \declaremodule{standard}{sched} | 
					
						
							| 
									
										
										
										
											2000-12-01 15:25:23 +00:00
										 |  |  | \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | \modulesynopsis{General purpose event scheduler.} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The \module{sched} module defines a class which implements a general | 
					
						
							| 
									
										
										
										
											1999-06-25 19:13:36 +00:00
										 |  |  | purpose event scheduler:\index{event scheduling} | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \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  | 
					
						
							| 
									
										
										
										
											1999-06-25 19:13:36 +00:00
										 |  |  | a number (the ``time'', in any units whatsoever).  The \var{delayfunc} | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | 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} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-06-25 19:13:36 +00:00
										 |  |  | \subsection{Scheduler Objects \label{scheduler-objects}} | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-06-25 19:13:36 +00:00
										 |  |  | \class{scheduler} instances have the following methods: | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{enterabs}{time, priority, action, argument} | 
					
						
							|  |  |  | Schedule a new event. The \var{time} argument should be a numeric type | 
					
						
							| 
									
										
										
										
											2000-04-03 20:13:55 +00:00
										 |  |  | compatible with the return value of the \var{timefunc} function passed  | 
					
						
							|  |  |  | to the constructor. Events scheduled for | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | the same \var{time} will be executed in the order of their | 
					
						
							|  |  |  | \var{priority}. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-23 19:28:09 +00:00
										 |  |  | Executing the event means executing | 
					
						
							|  |  |  | \code{\var{action}(*\var{argument})}.  \var{argument} must be a | 
					
						
							|  |  |  | sequence holding the parameters for \var{action}. | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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}{} | 
					
						
							| 
									
										
										
										
											1999-06-25 19:13:36 +00:00
										 |  |  | Return true if the event queue is empty. | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | \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 | 
					
						
							| 
									
										
										
										
											2000-07-16 19:01:10 +00:00
										 |  |  | events will be dropped; the calling code is responsible for canceling  | 
					
						
							| 
									
										
										
										
											1999-06-25 18:52:44 +00:00
										 |  |  | events which are no longer pertinent. | 
					
						
							|  |  |  | \end{methoddesc} |