mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 49fd7fa443
			
		
	
	
		49fd7fa443
		
	
	
	
	
		
			
			number of tests, all because of the codecs/_multibytecodecs issue described here (it's not a Py3K issue, just something Py3K discovers): http://mail.python.org/pipermail/python-dev/2006-April/064051.html Hye-Shik Chang promised to look for a fix, so no need to fix it here. The tests that are expected to break are: test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecs test_multibytecodec This merge fixes an actual test failure (test_weakref) in this branch, though, so I believe merging is the right thing to do anyway.
		
			
				
	
	
		
			145 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| 
 | |
| \section{\module{Queue} ---
 | |
|          A synchronized queue class}
 | |
| 
 | |
| \declaremodule{standard}{Queue}
 | |
| \modulesynopsis{A synchronized queue class.}
 | |
| 
 | |
| 
 | |
| The \module{Queue} module implements a multi-producer, multi-consumer
 | |
| FIFO queue.  It is especially useful in threads 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.
 | |
| 
 | |
| The \module{Queue} module defines the following class and exception:
 | |
| 
 | |
| 
 | |
| \begin{classdesc}{Queue}{maxsize}
 | |
| Constructor for the class.  \var{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 \var{maxsize} is less than or equal to
 | |
| zero, the queue size is infinite.
 | |
| \end{classdesc}
 | |
| 
 | |
| \begin{excdesc}{Empty}
 | |
| Exception raised when non-blocking \method{get()} (or
 | |
| \method{get_nowait()}) is called on a \class{Queue} object which is
 | |
| empty.
 | |
| \end{excdesc}
 | |
| 
 | |
| \begin{excdesc}{Full}
 | |
| Exception raised when non-blocking \method{put()} (or
 | |
| \method{put_nowait()}) is called on a \class{Queue} object which is
 | |
| full.
 | |
| \end{excdesc}
 | |
| 
 | |
| \subsection{Queue Objects}
 | |
| \label{QueueObjects}
 | |
| 
 | |
| Class \class{Queue} implements queue objects and has the methods
 | |
| described below.  This class can be derived from in order to implement
 | |
| other queue organizations (e.g. stack) but the inheritable interface
 | |
| is not described here.  See the source code for details.  The public
 | |
| methods are:
 | |
| 
 | |
| \begin{methoddesc}{qsize}{}
 | |
| Return the approximate size of the queue.  Because of multithreading
 | |
| semantics, this number is not reliable.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{empty}{}
 | |
| Return \code{True} if the queue is empty, \code{False} otherwise.
 | |
| Because of multithreading semantics, this is not reliable.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{full}{}
 | |
| Return \code{True} if the queue is full, \code{False} otherwise.
 | |
| Because of multithreading semantics, this is not reliable.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{put}{item\optional{, block\optional{, timeout}}}
 | |
| Put \var{item} into the queue. If optional args \var{block} is true
 | |
| and \var{timeout} is None (the default), block if necessary until a
 | |
| free slot is available. If \var{timeout} is a positive number, it
 | |
| blocks at most \var{timeout} seconds and raises the \exception{Full}
 | |
| exception if no free slot was available within that time.
 | |
| Otherwise (\var{block} is false), put an item on the queue if a free
 | |
| slot is immediately available, else raise the \exception{Full}
 | |
| exception (\var{timeout} is ignored in that case).
 | |
| 
 | |
| \versionadded[the timeout parameter]{2.3}
 | |
| 
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{put_nowait}{item}
 | |
| Equivalent to \code{put(\var{item}, False)}.
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{get}{\optional{block\optional{, timeout}}}
 | |
| Remove and return an item from the queue. If optional args
 | |
| \var{block} is true and \var{timeout} is None (the default),
 | |
| block if necessary until an item is available. If \var{timeout} is
 | |
| a positive number, it blocks at most \var{timeout} seconds and raises
 | |
| the \exception{Empty} exception if no item was available within that
 | |
| time. Otherwise (\var{block} is false), return an item if one is
 | |
| immediately available, else raise the \exception{Empty} exception
 | |
| (\var{timeout} is ignored in that case).
 | |
| 
 | |
| \versionadded[the timeout parameter]{2.3}
 | |
| 
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{get_nowait}{}
 | |
| Equivalent to \code{get(False)}.
 | |
| \end{methoddesc}
 | |
| 
 | |
| Two methods are offered to support tracking whether enqueued tasks have
 | |
| been fully processed by daemon consumer threads.
 | |
| 
 | |
| \begin{methoddesc}{task_done}{}
 | |
| Indicate that a formerly enqueued task is complete.  Used by queue consumer
 | |
| threads.  For each \method{get()} used to fetch a task, a subsequent call to
 | |
| \method{task_done()} tells the queue that the processing on the task is complete.
 | |
| 
 | |
| If a \method{join()} is currently blocking, it will resume when all items
 | |
| have been processed (meaning that a \method{task_done()} call was received
 | |
| for every item that had been \method{put()} into the queue).
 | |
| 
 | |
| Raises a \exception{ValueError} if called more times than there were items
 | |
| placed in the queue.
 | |
| \versionadded{2.5}
 | |
| \end{methoddesc}
 | |
| 
 | |
| \begin{methoddesc}{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 \method{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.
 | |
| \versionadded{2.5}
 | |
| \end{methoddesc}
 | |
| 
 | |
| Example of how to wait for enqueued tasks to be completed:
 | |
| 
 | |
| \begin{verbatim}
 | |
|     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
 | |
| \end{verbatim}
 |