\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}
