\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, Linux, SGI
IRIX, Solaris 2.x, as well as on systems that have a \POSIX{} thread
(a.k.a. ``pthread'') implementation.  For systems lacking the \module{thread}
module, the \refmodule[dummythread]{dummy_thread} module is available.
It duplicates this module's interface and can be
used as a drop-in replacement.
\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 and return its identifier.  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}{interrupt_main}{}
Raise a KeyboardInterrupt in the main thread.  A subthread can use this
function to interrupt the main thread.
\versionadded{2.3}
\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_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).  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.  The
return value is \code{True} if the lock is acquired successfully,
\code{False} 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{True} if it has been acquired by
some thread, \code{False} 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}
