\section{\module{thread} ---
         Multiple threads of control}

\declaremodule{builtin}{thread}
\modulesynopsis{Create multiple threads of control within one interpreter.}


This module provides low-level primitives for working with multiple
threads (a.k.a.\ \dfn{light-weight processes} or \dfn{tasks}) --- multiple
threads of control sharing their global data space.  For
synchronization, simple locks (a.k.a.\ \dfn{mutexes} or \dfn{binary
semaphores}) are provided.
\index{light-weight processes}
\index{processes, light-weight}
\index{binary semaphores}
\index{semaphores, binary}

The module is optional.  It is supported on Windows NT and '95, SGI
IRIX, Solaris 2.x, as well as on systems that have a \POSIX{} thread
(a.k.a. ``pthread'') implementation.
\index{pthreads}
\indexii{threads}{\POSIX{}}

It defines the following constant and functions:

\begin{excdesc}{error}
Raised on thread-specific errors.
\end{excdesc}

\begin{datadesc}{LockType}
This is the type of lock objects.
\end{datadesc}

\begin{funcdesc}{start_new_thread}{function, args\optional{, kwargs}}
Start a new thread.  The thread executes the function \var{function}
with the argument list \var{args} (which must be a tuple).  The
optional \var{kwargs} argument specifies a dictionary of keyword
arguments.  When the
function returns, the thread silently exits.  When the function
terminates with an unhandled exception, a stack trace is printed and
then the thread exits (but other threads continue to run).
\end{funcdesc}

\begin{funcdesc}{exit}{}
Raise the \exception{SystemExit} exception.  When not caught, this
will cause the thread to exit silently.
\end{funcdesc}

\begin{funcdesc}{exit_thread}{}
\deprecated{1.5.2}{Use \function{exit()}.}
This is an obsolete synonym for \function{exit()}.
\end{funcdesc}

%\begin{funcdesc}{exit_prog}{status}
%Exit all threads and report the value of the integer argument
%\var{status} as the exit status of the entire program.
%\strong{Caveat:} code in pending \keyword{finally} clauses, in this thread
%or in other threads, is not executed.
%\end{funcdesc}

\begin{funcdesc}{allocate_lock}{}
Return a new lock object.  Methods of locks are described below.  The
lock is initially unlocked.
\end{funcdesc}

\begin{funcdesc}{get_ident}{}
Return the `thread identifier' of the current thread.  This is a
nonzero integer.  Its value has no direct meaning; it is intended as a
magic cookie to be used e.g. to index a dictionary of thread-specific
data.  Thread identifiers may be recycled when a thread exits and
another thread is created.
\end{funcdesc}


Lock objects have the following methods:

\begin{methoddesc}[lock]{acquire}{\optional{waitflag}}
Without the optional argument, this method acquires the lock
unconditionally, if necessary waiting until it is released by another
thread (only one thread at a time can acquire a lock --- that's their
reason for existence), and returns \code{None}.  If the integer
\var{waitflag} argument is present, the action depends on its
value: if it is zero, the lock is only acquired if it can be acquired
immediately without waiting, while if it is nonzero, the lock is
acquired unconditionally as before.  If an argument is present, the
return value is \code{1} if the lock is acquired successfully,
\code{0} if not.
\end{methoddesc}

\begin{methoddesc}[lock]{release}{}
Releases the lock.  The lock must have been acquired earlier, but not
necessarily by the same thread.
\end{methoddesc}

\begin{methoddesc}[lock]{locked}{}
Return the status of the lock:\ \code{1} if it has been acquired by
some thread, \code{0} if not.
\end{methoddesc}

\strong{Caveats:}

\begin{itemize}
\item
Threads interact strangely with interrupts: the
\exception{KeyboardInterrupt} exception will be received by an
arbitrary thread.  (When the \refmodule{signal}\refbimodindex{signal}
module is available, interrupts always go to the main thread.)

\item
Calling \function{sys.exit()} or raising the \exception{SystemExit}
exception is equivalent to calling \function{exit()}.

\item
Not all built-in functions that may block waiting for I/O allow other
threads to run.  (The most popular ones (\function{time.sleep()},
\method{\var{file}.read()}, \function{select.select()}) work as
expected.)

\item
It is not possible to interrupt the \method{acquire()} method on a lock
--- the \exception{KeyboardInterrupt} exception will happen after the
lock has been acquired.

\item
When the main thread exits, it is system defined whether the other
threads survive.  On SGI IRIX using the native thread implementation,
they survive.  On most other systems, they are killed without
executing \keyword{try} ... \keyword{finally} clauses or executing
object destructors.
\indexii{threads}{IRIX}

\item
When the main thread exits, it does not do any of its usual cleanup
(except that \keyword{try} ... \keyword{finally} clauses are honored),
and the standard I/O files are not flushed.

\end{itemize}
