blob: 4f5497ad8db23faddd4d40dab04096c1c43d892f [file] [log] [blame]
Guido van Rossum5fdeeea1994-01-02 01:22:07 +00001\section{Built-in Module \sectcode{thread}}
Guido van Rossume47da0a1997-07-17 16:34:52 +00002\label{module-thread}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +00003\bimodindex{thread}
4
5This module provides low-level primitives for working with multiple
Guido van Rossum6bb1adc1995-03-13 10:03:32 +00006threads (a.k.a.\ \dfn{light-weight processes} or \dfn{tasks}) --- multiple
Guido van Rossum5fdeeea1994-01-02 01:22:07 +00007threads of control sharing their global data space. For
Guido van Rossum6bb1adc1995-03-13 10:03:32 +00008synchronization, simple locks (a.k.a.\ \dfn{mutexes} or \dfn{binary
Guido van Rossum5fdeeea1994-01-02 01:22:07 +00009semaphores}) are provided.
10
Guido van Rossum3572d371997-08-14 19:51:26 +000011The module is optional. It is supported on Windows NT and '95, SGI
12IRIX, Solaris 2.x, as well as on systems that have a POSIX thread
13(a.k.a. ``pthread'') implementation.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000014
15It defines the following constant and functions:
16
17\renewcommand{\indexsubitem}{(in module thread)}
18\begin{excdesc}{error}
19Raised on thread-specific errors.
20\end{excdesc}
21
22\begin{funcdesc}{start_new_thread}{func\, arg}
23Start a new thread. The thread executes the function \var{func}
24with the argument list \var{arg} (which must be a tuple). When the
Guido van Rossum6bb1adc1995-03-13 10:03:32 +000025function returns, the thread silently exits. When the function
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000026terminates with an unhandled exception, a stack trace is printed and
27then the thread exits (but other threads continue to run).
28\end{funcdesc}
29
Guido van Rossum470be141995-03-17 16:07:09 +000030\begin{funcdesc}{exit}{}
31This is a shorthand for \code{thread.exit_thread()}.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000032\end{funcdesc}
33
Guido van Rossum470be141995-03-17 16:07:09 +000034\begin{funcdesc}{exit_thread}{}
35Raise the \code{SystemExit} exception. When not caught, this will
36cause the thread to exit silently.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000037\end{funcdesc}
38
Guido van Rossum470be141995-03-17 16:07:09 +000039%\begin{funcdesc}{exit_prog}{status}
40%Exit all threads and report the value of the integer argument
41%\var{status} as the exit status of the entire program.
42%\strong{Caveat:} code in pending \code{finally} clauses, in this thread
43%or in other threads, is not executed.
44%\end{funcdesc}
45
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000046\begin{funcdesc}{allocate_lock}{}
47Return a new lock object. Methods of locks are described below. The
48lock is initially unlocked.
49\end{funcdesc}
50
Guido van Rossumb8b264b1994-08-12 13:13:50 +000051\begin{funcdesc}{get_ident}{}
52Return the `thread identifier' of the current thread. This is a
53nonzero integer. Its value has no direct meaning; it is intended as a
54magic cookie to be used e.g. to index a dictionary of thread-specific
55data. Thread identifiers may be recycled when a thread exits and
56another thread is created.
57\end{funcdesc}
58
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000059Lock objects have the following methods:
60
61\renewcommand{\indexsubitem}{(lock method)}
Guido van Rossum96628a91995-04-10 11:34:00 +000062\begin{funcdesc}{acquire}{\optional{waitflag}}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000063Without the optional argument, this method acquires the lock
64unconditionally, if necessary waiting until it is released by another
65thread (only one thread at a time can acquire a lock --- that's their
66reason for existence), and returns \code{None}. If the integer
Guido van Rossum6bb1adc1995-03-13 10:03:32 +000067\var{waitflag} argument is present, the action depends on its value:\
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000068if it is zero, the lock is only acquired if it can be acquired
69immediately without waiting, while if it is nonzero, the lock is
70acquired unconditionally as before. If an argument is present, the
71return value is 1 if the lock is acquired successfully, 0 if not.
72\end{funcdesc}
73
74\begin{funcdesc}{release}{}
75Releases the lock. The lock must have been acquired earlier, but not
76necessarily by the same thread.
77\end{funcdesc}
78
79\begin{funcdesc}{locked}{}
Guido van Rossum6bb1adc1995-03-13 10:03:32 +000080Return the status of the lock:\ 1 if it has been acquired by some
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000081thread, 0 if not.
82\end{funcdesc}
83
84{\bf Caveats:}
85
86\begin{itemize}
87\item
88Threads interact strangely with interrupts: the
89\code{KeyboardInterrupt} exception will be received by an arbitrary
Guido van Rossum470be141995-03-17 16:07:09 +000090thread. (When the \code{signal} module is available, interrupts
91always go to the main thread.)
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000092
93\item
Guido van Rossum3572d371997-08-14 19:51:26 +000094Calling \code{sys.exit()} or raising the \code{SystemExit} exception is
Guido van Rossum470be141995-03-17 16:07:09 +000095equivalent to calling \code{thread.exit_thread()}.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000096
97\item
98Not all built-in functions that may block waiting for I/O allow other
Guido van Rossum470be141995-03-17 16:07:09 +000099threads to run. (The most popular ones (\code{sleep}, \code{read},
100\code{select}) work as expected.)
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000101
Guido van Rossum3572d371997-08-14 19:51:26 +0000102\item
103It is not possible to interrupt the \code{acquire()} method on a lock
104-- the \code{KeyboardInterrupt} exception will happen after the lock
105has been acquired.
106
107\item
108When the main thread exits, it is system defined whether the other
109threads survive. On SGI IRIX using the native thread implementation,
110they survive. On most other systems, they are killed without
111executing ``try-finally'' clauses or executing object destructors.
112
113\item
114When the main thread exits, it doesn't do any of its usual cleanup
115(except that ``try-finally'' clauses are honored), and the standard
116I/O files are not flushed.
117
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000118\end{itemize}