\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 or locked.
\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 or locked.
\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{1} if the queue is empty, \code{0} otherwise.  Because
of multithreading semantics, this is not reliable.
\end{methoddesc}

\begin{methoddesc}{full}{}
Return \code{1} if the queue is full, \code{0} otherwise.  Because of
multithreading semantics, this is not reliable.
\end{methoddesc}

\begin{methoddesc}{put}{item\optional{, block}}
Put \var{item} into the queue.  If optional argument \var{block} is 1
(the default), block if necessary until a free slot is available.
Otherwise (\var{block} is 0), put \var{item} on the queue if a free
slot is immediately available, else raise the \exception{Full}
exception.
\end{methoddesc}

\begin{methoddesc}{put_nowait}{item}
Equivalent to \code{put(\var{item}, 0)}.
\end{methoddesc}

\begin{methoddesc}{get}{\optional{block}}
Remove and return an item from the queue.  If optional argument
\var{block} is 1 (the default), block if necessary until an item is
available.  Otherwise (\var{block} is 0), return an item if one is
immediately available, else raise the
\exception{Empty} exception.
\end{methoddesc}

\begin{methoddesc}{get_nowait}{}
Equivalent to \code{get(0)}.
\end{methoddesc}
