| 
									
										
										
										
											2024-05-08 21:52:39 +02:00
										 |  |  | :mod:`!sched` --- Event scheduler
 | 
					
						
							|  |  |  | =================================
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. module:: sched
 | 
					
						
							|  |  |  |    :synopsis: General purpose event scheduler.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-11 15:02:54 -04:00
										 |  |  | .. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-10 03:26:08 +00:00
										 |  |  | **Source code:** :source:`Lib/sched.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-11 15:02:54 -04:00
										 |  |  | .. index:: single: event scheduling
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-10 19:54:11 +00:00
										 |  |  | --------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | The :mod:`sched` module defines a class which implements a general purpose event
 | 
					
						
							|  |  |  | scheduler:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-09 02:14:27 -05:00
										 |  |  | .. class:: scheduler(timefunc=time.monotonic, delayfunc=time.sleep)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    The :class:`scheduler` class defines a generic interface to scheduling events.
 | 
					
						
							|  |  |  |    It needs two functions to actually deal with the "outside world" --- *timefunc*
 | 
					
						
							|  |  |  |    should be callable without arguments, and return  a number (the "time", in any
 | 
					
						
							| 
									
										
										
										
											2019-05-28 06:47:24 -04:00
										 |  |  |    units whatsoever).  The *delayfunc* function should be callable with one
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    argument, compatible with the output of *timefunc*, and should delay that many
 | 
					
						
							|  |  |  |    time units. *delayfunc* will also be called with the argument ``0`` after each
 | 
					
						
							|  |  |  |    event is run to allow other threads an opportunity to run in multi-threaded
 | 
					
						
							|  |  |  |    applications.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-22 13:33:34 +01:00
										 |  |  |    .. versionchanged:: 3.3
 | 
					
						
							|  |  |  |       *timefunc* and *delayfunc* parameters are optional.
 | 
					
						
							| 
									
										
										
										
											2012-12-29 20:57:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-14 13:34:26 +01:00
										 |  |  |    .. versionchanged:: 3.3
 | 
					
						
							|  |  |  |       :class:`scheduler` class can be safely used in multi-threaded
 | 
					
						
							|  |  |  |       environments.
 | 
					
						
							| 
									
										
										
										
											2011-11-22 13:33:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | Example::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    >>> import sched, time
 | 
					
						
							| 
									
										
										
										
											2024-02-25 11:55:57 +00:00
										 |  |  |    >>> s = sched.scheduler(time.time, time.sleep)
 | 
					
						
							| 
									
										
										
										
											2012-12-29 21:13:45 +02:00
										 |  |  |    >>> def print_time(a='default'):
 | 
					
						
							|  |  |  |    ...     print("From print_time", time.time(), a)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    ...
 | 
					
						
							|  |  |  |    >>> def print_some_times():
 | 
					
						
							| 
									
										
										
										
											2007-09-04 07:15:32 +00:00
										 |  |  |    ...     print(time.time())
 | 
					
						
							| 
									
										
										
										
											2012-12-29 21:13:45 +02:00
										 |  |  |    ...     s.enter(10, 1, print_time)
 | 
					
						
							|  |  |  |    ...     s.enter(5, 2, print_time, argument=('positional',))
 | 
					
						
							| 
									
										
										
										
											2022-12-23 21:21:52 -08:00
										 |  |  |    ...     # despite having higher priority, 'keyword' runs after 'positional' as enter() is relative
 | 
					
						
							| 
									
										
										
										
											2012-12-29 21:13:45 +02:00
										 |  |  |    ...     s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
 | 
					
						
							| 
									
										
										
										
											2022-12-23 21:21:52 -08:00
										 |  |  |    ...     s.enterabs(1_650_000_000, 10, print_time, argument=("first enterabs",))
 | 
					
						
							|  |  |  |    ...     s.enterabs(1_650_000_000, 5, print_time, argument=("second enterabs",))
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    ...     s.run()
 | 
					
						
							| 
									
										
										
										
											2007-09-04 07:15:32 +00:00
										 |  |  |    ...     print(time.time())
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    ...
 | 
					
						
							|  |  |  |    >>> print_some_times()
 | 
					
						
							| 
									
										
										
										
											2022-12-23 21:21:52 -08:00
										 |  |  |    1652342830.3640375
 | 
					
						
							|  |  |  |    From print_time 1652342830.3642538 second enterabs
 | 
					
						
							|  |  |  |    From print_time 1652342830.3643398 first enterabs
 | 
					
						
							|  |  |  |    From print_time 1652342835.3694863 positional
 | 
					
						
							|  |  |  |    From print_time 1652342835.3696074 keyword
 | 
					
						
							|  |  |  |    From print_time 1652342840.369612 default
 | 
					
						
							|  |  |  |    1652342840.3697174
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. _scheduler-objects:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Scheduler Objects
 | 
					
						
							|  |  |  | -----------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r59987 | raymond.hettinger | 2008-01-15 21:52:42 +0100 (Tue, 15 Jan 2008) | 1 line
  Refactor if/elif chain for clarity and speed.  Remove dependency on subclasses having to implement _empty and _full.
........
  r59988 | raymond.hettinger | 2008-01-15 22:22:47 +0100 (Tue, 15 Jan 2008) | 1 line
  Fix-up half-written paragraph in the docs
........
  r59989 | amaury.forgeotdarc | 2008-01-15 22:25:11 +0100 (Tue, 15 Jan 2008) | 3 lines
  test_doctest fails since r59984.
  Not sure if these are the correct values, but save_stdout has to be set before its usage...
........
  r59992 | andrew.kuchling | 2008-01-16 01:32:03 +0100 (Wed, 16 Jan 2008) | 1 line
  Docstring typos
........
  r59993 | andrew.kuchling | 2008-01-16 04:17:25 +0100 (Wed, 16 Jan 2008) | 1 line
  Add PEP 3141 section
........
  r59998 | andrew.kuchling | 2008-01-16 14:01:51 +0100 (Wed, 16 Jan 2008) | 1 line
  Markup fix
........
  r59999 | georg.brandl | 2008-01-16 17:56:29 +0100 (Wed, 16 Jan 2008) | 2 lines
  Fix MSDN library URL. (#1854)
........
  r60006 | georg.brandl | 2008-01-16 21:27:56 +0100 (Wed, 16 Jan 2008) | 3 lines
  Add Python-specific content to Doc dir. Update configuration file
  to work with the newest Sphinx.
........
  r60007 | georg.brandl | 2008-01-16 21:29:00 +0100 (Wed, 16 Jan 2008) | 2 lines
  Doc build should work with 2.4 now.
........
  r60009 | raymond.hettinger | 2008-01-17 00:38:16 +0100 (Thu, 17 Jan 2008) | 1 line
  Minor wordsmithing.
........
  r60010 | raymond.hettinger | 2008-01-17 00:40:45 +0100 (Thu, 17 Jan 2008) | 1 line
  Add queues will alternative fetch orders (priority based and stack based).
........
  r60011 | raymond.hettinger | 2008-01-17 00:49:35 +0100 (Thu, 17 Jan 2008) | 1 line
  Add news entry.
........
  r60013 | raymond.hettinger | 2008-01-17 04:02:14 +0100 (Thu, 17 Jan 2008) | 1 line
  Make starmap() match its pure python definition and accept any itertable input (not just tuples).
........
  r60015 | gregory.p.smith | 2008-01-17 08:43:20 +0100 (Thu, 17 Jan 2008) | 3 lines
  Comply with RFC 3207.
  Fixes issue 829951 - http://bugs.python.org/issue829951
........
  r60018 | gregory.p.smith | 2008-01-17 09:03:17 +0100 (Thu, 17 Jan 2008) | 2 lines
  entry for r60015
........
  r60019 | raymond.hettinger | 2008-01-17 09:07:05 +0100 (Thu, 17 Jan 2008) | 1 line
  Note versionadded.
........
  r60020 | gregory.p.smith | 2008-01-17 09:35:49 +0100 (Thu, 17 Jan 2008) | 8 lines
  Fixes (accepts patch) issue1339 - http://bugs.python.org/issue1339
  - Factor out the duplication of EHLO/HELO in login() and sendmail() to
    a new function, ehlo_or_helo_if_needed().
  - Use ehlo_or_helo_if_needed() in starttls()
  - Check for the starttls exception in starttls() in the same way as
    login() checks for the auth extension.
  Contributed by Bill Fenner.
........
  r60021 | andrew.kuchling | 2008-01-17 13:00:15 +0100 (Thu, 17 Jan 2008) | 1 line
  Revise 3141 section a bit; add some Windows items
........
  r60022 | brett.cannon | 2008-01-17 19:45:10 +0100 (Thu, 17 Jan 2008) | 2 lines
  Fix a function pointer declaration to silence the compiler.
........
  r60024 | raymond.hettinger | 2008-01-17 20:31:38 +0100 (Thu, 17 Jan 2008) | 1 line
  Issue #1861:  Add read-only attribute listing upcoming events in the order they will be run.
........
  r60025 | andrew.kuchling | 2008-01-17 20:49:24 +0100 (Thu, 17 Jan 2008) | 1 line
  Correction from Jordan Lewis: halfdelay() uses tenths of a second, not milliseconds
........
  r60026 | raymond.hettinger | 2008-01-17 23:27:49 +0100 (Thu, 17 Jan 2008) | 1 line
  Add advice on choosing between scheduler and threading.Timer().
........
  r60028 | christian.heimes | 2008-01-18 00:01:44 +0100 (Fri, 18 Jan 2008) | 2 lines
  Updated new property syntax. An elaborate example for subclassing and the getter was missing.
  Added comment about VS 2008 and PGO builds.
........
  r60029 | raymond.hettinger | 2008-01-18 00:32:01 +0100 (Fri, 18 Jan 2008) | 1 line
  Fix-up Timer() example.
........
  r60030 | raymond.hettinger | 2008-01-18 00:56:56 +0100 (Fri, 18 Jan 2008) | 1 line
  Fix markup
........
  r60031 | raymond.hettinger | 2008-01-18 01:10:42 +0100 (Fri, 18 Jan 2008) | 1 line
  clearcache() needs to remove the dict as well as clear it.
........
  r60033 | andrew.kuchling | 2008-01-18 03:26:16 +0100 (Fri, 18 Jan 2008) | 1 line
  Bump verson
........
  r60034 | andrew.kuchling | 2008-01-18 03:42:52 +0100 (Fri, 18 Jan 2008) | 1 line
  Typo fix
........
  r60035 | christian.heimes | 2008-01-18 08:30:20 +0100 (Fri, 18 Jan 2008) | 3 lines
  Coverity issue CID #197
  var_decl: Declared variable "stm" without initializer
  ninit_use_in_call: Using uninitialized value "stm" (field "stm".tm_zone uninitialized) in call to function "mktime"
........
  r60036 | christian.heimes | 2008-01-18 08:45:30 +0100 (Fri, 18 Jan 2008) | 11 lines
  Coverity issue CID #167
  Event alloc_fn: Called allocation function "metacompile" [model]
  Event var_assign: Assigned variable "gr" to storage returned from "metacompile"
  		gr = metacompile(n);
  Event pass_arg: Variable "gr" not freed or pointed-to in function "maketables" [model]
  		g = maketables(gr);
    		translatelabels(g);
    		addfirstsets(g);
  Event leaked_storage: Returned without freeing storage "gr"
  		return g;
........
  r60038 | christian.heimes | 2008-01-18 09:04:57 +0100 (Fri, 18 Jan 2008) | 3 lines
  Coverity issue CID #182
  size_error: Allocating 1 bytes to pointer "children", which needs at least 4 bytes
........
  r60041 | christian.heimes | 2008-01-18 09:47:59 +0100 (Fri, 18 Jan 2008) | 4 lines
  Coverity issue CID #169
  local_ptr_assign_local: Assigning address of stack variable "namebuf" to pointer "filename"
  out_of_scope: Variable "namebuf" goes out of scope
  use_invalid: Used "filename" pointing to out-of-scope variable "namebuf"
........
  r60042 | christian.heimes | 2008-01-18 09:53:45 +0100 (Fri, 18 Jan 2008) | 2 lines
  Coverity CID #168
  leaked_storage: Returned without freeing storage "fp"
........
											
										 
											2008-01-18 09:56:22 +00:00
										 |  |  | :class:`scheduler` instances have the following methods and attributes:
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-29 21:13:45 +02:00
										 |  |  | .. method:: scheduler.enterabs(time, priority, action, argument=(), kwargs={})
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Schedule a new event. The *time* argument should be a numeric type compatible
 | 
					
						
							|  |  |  |    with the return value of the *timefunc* function passed  to the constructor.
 | 
					
						
							|  |  |  |    Events scheduled for the same *time* will be executed in the order of their
 | 
					
						
							| 
									
										
										
										
											2017-11-24 21:43:01 -08:00
										 |  |  |    *priority*. A lower number represents a higher priority.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-22 13:33:34 +01:00
										 |  |  |    Executing the event means executing ``action(*argument, **kwargs)``.
 | 
					
						
							| 
									
										
										
										
											2013-01-02 12:31:26 +02:00
										 |  |  |    *argument* is a sequence holding the positional arguments for *action*.
 | 
					
						
							|  |  |  |    *kwargs* is a dictionary holding the keyword arguments for *action*.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return value is an event which may be used for later cancellation of the event
 | 
					
						
							|  |  |  |    (see :meth:`cancel`).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-22 13:33:34 +01:00
										 |  |  |    .. versionchanged:: 3.3
 | 
					
						
							|  |  |  |       *argument* parameter is optional.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-06 05:01:16 +05:00
										 |  |  |    .. versionchanged:: 3.3
 | 
					
						
							| 
									
										
										
										
											2011-11-22 13:33:34 +01:00
										 |  |  |       *kwargs* parameter was added.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-22 13:33:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-29 21:13:45 +02:00
										 |  |  | .. method:: scheduler.enter(delay, priority, action, argument=(), kwargs={})
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-28 12:22:25 +03:00
										 |  |  |    Schedule an event for *delay* more time units. Other than the relative time, the
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    other arguments, the effect and the return value are the same as those for
 | 
					
						
							|  |  |  |    :meth:`enterabs`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-22 13:33:34 +01:00
										 |  |  |    .. versionchanged:: 3.3
 | 
					
						
							|  |  |  |       *argument* parameter is optional.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-06 05:01:16 +05:00
										 |  |  |    .. versionchanged:: 3.3
 | 
					
						
							| 
									
										
										
										
											2011-11-22 13:33:34 +01:00
										 |  |  |       *kwargs* parameter was added.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. method:: scheduler.cancel(event)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Remove the event from the queue. If *event* is not an event currently in the
 | 
					
						
							| 
									
										
										
										
											2009-05-26 07:51:03 +00:00
										 |  |  |    queue, this method will raise a :exc:`ValueError`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: scheduler.empty()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-12 16:57:03 +02:00
										 |  |  |    Return ``True`` if the event queue is empty.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-14 14:38:45 +01:00
										 |  |  | .. method:: scheduler.run(blocking=True)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-29 08:48:10 +03:00
										 |  |  |    Run all scheduled events. This method will wait  (using the *delayfunc*
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    function passed to the constructor) for the next event, then execute it and so
 | 
					
						
							|  |  |  |    on until there are no more scheduled events.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-29 12:17:13 +02:00
										 |  |  |    If *blocking* is false executes the scheduled events due to expire soonest
 | 
					
						
							| 
									
										
										
										
											2012-03-15 13:05:41 +01:00
										 |  |  |    (if any) and then return the deadline of the next scheduled call in the
 | 
					
						
							|  |  |  |    scheduler (if any).
 | 
					
						
							| 
									
										
										
										
											2011-12-14 14:38:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    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 :meth:`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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-06 05:01:16 +05:00
										 |  |  |    .. versionchanged:: 3.3
 | 
					
						
							| 
									
										
										
										
											2011-12-14 14:38:45 +01:00
										 |  |  |       *blocking* parameter was added.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r59987 | raymond.hettinger | 2008-01-15 21:52:42 +0100 (Tue, 15 Jan 2008) | 1 line
  Refactor if/elif chain for clarity and speed.  Remove dependency on subclasses having to implement _empty and _full.
........
  r59988 | raymond.hettinger | 2008-01-15 22:22:47 +0100 (Tue, 15 Jan 2008) | 1 line
  Fix-up half-written paragraph in the docs
........
  r59989 | amaury.forgeotdarc | 2008-01-15 22:25:11 +0100 (Tue, 15 Jan 2008) | 3 lines
  test_doctest fails since r59984.
  Not sure if these are the correct values, but save_stdout has to be set before its usage...
........
  r59992 | andrew.kuchling | 2008-01-16 01:32:03 +0100 (Wed, 16 Jan 2008) | 1 line
  Docstring typos
........
  r59993 | andrew.kuchling | 2008-01-16 04:17:25 +0100 (Wed, 16 Jan 2008) | 1 line
  Add PEP 3141 section
........
  r59998 | andrew.kuchling | 2008-01-16 14:01:51 +0100 (Wed, 16 Jan 2008) | 1 line
  Markup fix
........
  r59999 | georg.brandl | 2008-01-16 17:56:29 +0100 (Wed, 16 Jan 2008) | 2 lines
  Fix MSDN library URL. (#1854)
........
  r60006 | georg.brandl | 2008-01-16 21:27:56 +0100 (Wed, 16 Jan 2008) | 3 lines
  Add Python-specific content to Doc dir. Update configuration file
  to work with the newest Sphinx.
........
  r60007 | georg.brandl | 2008-01-16 21:29:00 +0100 (Wed, 16 Jan 2008) | 2 lines
  Doc build should work with 2.4 now.
........
  r60009 | raymond.hettinger | 2008-01-17 00:38:16 +0100 (Thu, 17 Jan 2008) | 1 line
  Minor wordsmithing.
........
  r60010 | raymond.hettinger | 2008-01-17 00:40:45 +0100 (Thu, 17 Jan 2008) | 1 line
  Add queues will alternative fetch orders (priority based and stack based).
........
  r60011 | raymond.hettinger | 2008-01-17 00:49:35 +0100 (Thu, 17 Jan 2008) | 1 line
  Add news entry.
........
  r60013 | raymond.hettinger | 2008-01-17 04:02:14 +0100 (Thu, 17 Jan 2008) | 1 line
  Make starmap() match its pure python definition and accept any itertable input (not just tuples).
........
  r60015 | gregory.p.smith | 2008-01-17 08:43:20 +0100 (Thu, 17 Jan 2008) | 3 lines
  Comply with RFC 3207.
  Fixes issue 829951 - http://bugs.python.org/issue829951
........
  r60018 | gregory.p.smith | 2008-01-17 09:03:17 +0100 (Thu, 17 Jan 2008) | 2 lines
  entry for r60015
........
  r60019 | raymond.hettinger | 2008-01-17 09:07:05 +0100 (Thu, 17 Jan 2008) | 1 line
  Note versionadded.
........
  r60020 | gregory.p.smith | 2008-01-17 09:35:49 +0100 (Thu, 17 Jan 2008) | 8 lines
  Fixes (accepts patch) issue1339 - http://bugs.python.org/issue1339
  - Factor out the duplication of EHLO/HELO in login() and sendmail() to
    a new function, ehlo_or_helo_if_needed().
  - Use ehlo_or_helo_if_needed() in starttls()
  - Check for the starttls exception in starttls() in the same way as
    login() checks for the auth extension.
  Contributed by Bill Fenner.
........
  r60021 | andrew.kuchling | 2008-01-17 13:00:15 +0100 (Thu, 17 Jan 2008) | 1 line
  Revise 3141 section a bit; add some Windows items
........
  r60022 | brett.cannon | 2008-01-17 19:45:10 +0100 (Thu, 17 Jan 2008) | 2 lines
  Fix a function pointer declaration to silence the compiler.
........
  r60024 | raymond.hettinger | 2008-01-17 20:31:38 +0100 (Thu, 17 Jan 2008) | 1 line
  Issue #1861:  Add read-only attribute listing upcoming events in the order they will be run.
........
  r60025 | andrew.kuchling | 2008-01-17 20:49:24 +0100 (Thu, 17 Jan 2008) | 1 line
  Correction from Jordan Lewis: halfdelay() uses tenths of a second, not milliseconds
........
  r60026 | raymond.hettinger | 2008-01-17 23:27:49 +0100 (Thu, 17 Jan 2008) | 1 line
  Add advice on choosing between scheduler and threading.Timer().
........
  r60028 | christian.heimes | 2008-01-18 00:01:44 +0100 (Fri, 18 Jan 2008) | 2 lines
  Updated new property syntax. An elaborate example for subclassing and the getter was missing.
  Added comment about VS 2008 and PGO builds.
........
  r60029 | raymond.hettinger | 2008-01-18 00:32:01 +0100 (Fri, 18 Jan 2008) | 1 line
  Fix-up Timer() example.
........
  r60030 | raymond.hettinger | 2008-01-18 00:56:56 +0100 (Fri, 18 Jan 2008) | 1 line
  Fix markup
........
  r60031 | raymond.hettinger | 2008-01-18 01:10:42 +0100 (Fri, 18 Jan 2008) | 1 line
  clearcache() needs to remove the dict as well as clear it.
........
  r60033 | andrew.kuchling | 2008-01-18 03:26:16 +0100 (Fri, 18 Jan 2008) | 1 line
  Bump verson
........
  r60034 | andrew.kuchling | 2008-01-18 03:42:52 +0100 (Fri, 18 Jan 2008) | 1 line
  Typo fix
........
  r60035 | christian.heimes | 2008-01-18 08:30:20 +0100 (Fri, 18 Jan 2008) | 3 lines
  Coverity issue CID #197
  var_decl: Declared variable "stm" without initializer
  ninit_use_in_call: Using uninitialized value "stm" (field "stm".tm_zone uninitialized) in call to function "mktime"
........
  r60036 | christian.heimes | 2008-01-18 08:45:30 +0100 (Fri, 18 Jan 2008) | 11 lines
  Coverity issue CID #167
  Event alloc_fn: Called allocation function "metacompile" [model]
  Event var_assign: Assigned variable "gr" to storage returned from "metacompile"
  		gr = metacompile(n);
  Event pass_arg: Variable "gr" not freed or pointed-to in function "maketables" [model]
  		g = maketables(gr);
    		translatelabels(g);
    		addfirstsets(g);
  Event leaked_storage: Returned without freeing storage "gr"
  		return g;
........
  r60038 | christian.heimes | 2008-01-18 09:04:57 +0100 (Fri, 18 Jan 2008) | 3 lines
  Coverity issue CID #182
  size_error: Allocating 1 bytes to pointer "children", which needs at least 4 bytes
........
  r60041 | christian.heimes | 2008-01-18 09:47:59 +0100 (Fri, 18 Jan 2008) | 4 lines
  Coverity issue CID #169
  local_ptr_assign_local: Assigning address of stack variable "namebuf" to pointer "filename"
  out_of_scope: Variable "namebuf" goes out of scope
  use_invalid: Used "filename" pointing to out-of-scope variable "namebuf"
........
  r60042 | christian.heimes | 2008-01-18 09:53:45 +0100 (Fri, 18 Jan 2008) | 2 lines
  Coverity CID #168
  leaked_storage: Returned without freeing storage "fp"
........
											
										 
											2008-01-18 09:56:22 +00:00
										 |  |  | .. attribute:: scheduler.queue
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Read-only attribute returning a list of upcoming events in the order they
 | 
					
						
							|  |  |  |    will be run.  Each event is shown as a :term:`named tuple` with the
 | 
					
						
							| 
									
										
										
										
											2012-12-29 20:57:52 +02:00
										 |  |  |    following fields:  time, priority, action, argument, kwargs.
 |