mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 679db4aa99
			
		
	
	
		679db4aa99
		
	
	
	
	
		
			
			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" ........
		
			
				
	
	
		
			161 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
	
		
			5.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| 
 | |
| :mod:`Queue` --- A synchronized queue class
 | |
| ===========================================
 | |
| 
 | |
| .. module:: Queue
 | |
|    :synopsis: A synchronized queue class.
 | |
| 
 | |
| 
 | |
| The :mod:`Queue` module implements multi-producer, multi-consumer queues.
 | |
| It is especially useful in threaded programming when information must be
 | |
| exchanged safely between multiple threads.  The :class:`Queue` class in this
 | |
| module implements all the required locking semantics.  It depends on the
 | |
| availability of thread support in Python; see the :mod:`threading`
 | |
| module.
 | |
| 
 | |
| Implements three types of queue whose only difference is the order that
 | |
| the entries are retrieved.  In a FIFO queue, the first tasks added are
 | |
| the first retrieved. In a LIFO queue, the most recently added entry is
 | |
| the first retrieved (operating like a stack).  With a priority queue,
 | |
| the entries are kept sorted (using the :mod:`heapq` module) and the
 | |
| lowest valued entry is retrieved first.
 | |
| 
 | |
| The :mod:`Queue` module defines the following classes and exceptions:
 | |
| 
 | |
| .. class:: Queue(maxsize)
 | |
| 
 | |
|    Constructor for a FIFO queue.  *maxsize* is an integer that sets the upperbound
 | |
|    limit on the number of items that can be placed in the queue.  Insertion will
 | |
|    block once this size has been reached, until queue items are consumed.  If
 | |
|    *maxsize* is less than or equal to zero, the queue size is infinite.
 | |
| 
 | |
| 
 | |
| .. class:: LifoQueue(maxsize)
 | |
| 
 | |
|    Constructor for a LIFO queue.  *maxsize* is an integer that sets the upperbound
 | |
|    limit on the number of items that can be placed in the queue.  Insertion will
 | |
|    block once this size has been reached, until queue items are consumed.  If
 | |
|    *maxsize* is less than or equal to zero, the queue size is infinite.
 | |
| 
 | |
|    .. versionadded:: 2.6
 | |
| 
 | |
| 
 | |
| .. class:: PriorityQueue(maxsize)
 | |
| 
 | |
|    Constructor for a priority queue.  *maxsize* is an integer that sets the upperbound
 | |
|    limit on the number of items that can be placed in the queue.  Insertion will
 | |
|    block once this size has been reached, until queue items are consumed.  If
 | |
|    *maxsize* is less than or equal to zero, the queue size is infinite.
 | |
| 
 | |
|    The lowest valued entries are retrieved first (the lowest valued entry is the
 | |
|    one returned by ``sorted(list(entries))[0]``).  A typical pattern for entries
 | |
|    is a tuple in the form: ``(priority_number, data)``.
 | |
| 
 | |
|    .. versionadded:: 2.6
 | |
| 
 | |
| 
 | |
| .. exception:: Empty
 | |
| 
 | |
|    Exception raised when non-blocking :meth:`get` (or :meth:`get_nowait`) is called
 | |
|    on a :class:`Queue` object which is empty.
 | |
| 
 | |
| 
 | |
| .. exception:: Full
 | |
| 
 | |
|    Exception raised when non-blocking :meth:`put` (or :meth:`put_nowait`) is called
 | |
|    on a :class:`Queue` object which is full.
 | |
| 
 | |
| 
 | |
| .. _queueobjects:
 | |
| 
 | |
| Queue Objects
 | |
| -------------
 | |
| 
 | |
| Queue objects (:class:``Queue``, :class:``LifoQueue``, or :class:``PriorityQueue``
 | |
| provide the public methods described below.  
 | |
| 
 | |
| 
 | |
| .. method:: Queue.qsize()
 | |
| 
 | |
|    Return the approximate size of the queue.  Note, qsize() > 0 doesn't
 | |
|    guarantee that a subsequent get() will not block, nor will qsize() < maxsize
 | |
|    guarantee that put() will not block.
 | |
| 
 | |
| 
 | |
| .. method:: Queue.put(item[, block[, timeout]])
 | |
| 
 | |
|    Put *item* into the queue. If optional args *block* is true and *timeout* is
 | |
|    None (the default), block if necessary until a free slot is available. If
 | |
|    *timeout* is a positive number, it blocks at most *timeout* seconds and raises
 | |
|    the :exc:`Full` exception if no free slot was available within that time.
 | |
|    Otherwise (*block* is false), put an item on the queue if a free slot is
 | |
|    immediately available, else raise the :exc:`Full` exception (*timeout* is
 | |
|    ignored in that case).
 | |
| 
 | |
| 
 | |
| .. method:: Queue.put_nowait(item)
 | |
| 
 | |
|    Equivalent to ``put(item, False)``.
 | |
| 
 | |
| 
 | |
| .. method:: Queue.get([block[, timeout]])
 | |
| 
 | |
|    Remove and return an item from the queue. If optional args *block* is true and
 | |
|    *timeout* is None (the default), block if necessary until an item is available.
 | |
|    If *timeout* is a positive number, it blocks at most *timeout* seconds and
 | |
|    raises the :exc:`Empty` exception if no item was available within that time.
 | |
|    Otherwise (*block* is false), return an item if one is immediately available,
 | |
|    else raise the :exc:`Empty` exception (*timeout* is ignored in that case).
 | |
| 
 | |
| 
 | |
| .. method:: Queue.get_nowait()
 | |
| 
 | |
|    Equivalent to ``get(False)``.
 | |
| 
 | |
| Two methods are offered to support tracking whether enqueued tasks have been
 | |
| fully processed by daemon consumer threads.
 | |
| 
 | |
| 
 | |
| .. method:: Queue.task_done()
 | |
| 
 | |
|    Indicate that a formerly enqueued task is complete.  Used by queue consumer
 | |
|    threads.  For each :meth:`get` used to fetch a task, a subsequent call to
 | |
|    :meth:`task_done` tells the queue that the processing on the task is complete.
 | |
| 
 | |
|    If a :meth:`join` is currently blocking, it will resume when all items have been
 | |
|    processed (meaning that a :meth:`task_done` call was received for every item
 | |
|    that had been :meth:`put` into the queue).
 | |
| 
 | |
|    Raises a :exc:`ValueError` if called more times than there were items placed in
 | |
|    the queue.
 | |
| 
 | |
| 
 | |
| .. method:: Queue.join()
 | |
| 
 | |
|    Blocks until all items in the queue have been gotten and processed.
 | |
| 
 | |
|    The count of unfinished tasks goes up whenever an item is added to the queue.
 | |
|    The count goes down whenever a consumer thread calls :meth:`task_done` to
 | |
|    indicate that the item was retrieved and all work on it is complete. When the
 | |
|    count of unfinished tasks drops to zero, join() unblocks.
 | |
| 
 | |
| 
 | |
| Example of how to wait for enqueued tasks to be completed::
 | |
| 
 | |
|    def worker(): 
 | |
|        while True: 
 | |
|            item = q.get() 
 | |
|            do_work(item) 
 | |
|            q.task_done() 
 | |
| 
 | |
|    q = Queue() 
 | |
|    for i in range(num_worker_threads): 
 | |
|         t = Thread(target=worker)
 | |
|         t.setDaemon(True)
 | |
|         t.start() 
 | |
| 
 | |
|    for item in source():
 | |
|        q.put(item) 
 | |
| 
 | |
|    q.join()       # block until all tasks are done
 | |
| 
 |