.. c:function:: PyThreadState* PyEval_SaveThread()
- Release the global interpreter lock (if it has been created and thread
- support is enabled) and reset the thread state to *NULL*, returning the
- previous thread state (which is not *NULL*). If the lock has been created,
- the current thread must have acquired it.
+ Release the global interpreter lock (if it has been created) and reset the
+ thread state to *NULL*, returning the previous thread state (which is not
+ *NULL*). If the lock has been created, the current thread must have
+ acquired it.
.. c:function:: void PyEval_RestoreThread(PyThreadState *tstate)
- Acquire the global interpreter lock (if it has been created and thread
- support is enabled) and set the thread state to *tstate*, which must not be
- *NULL*. If the lock has been created, the current thread must not have
- acquired it, otherwise deadlock ensues.
+ Acquire the global interpreter lock (if it has been created) and set the
+ thread state to *tstate*, which must not be *NULL*. If the lock has been
+ created, the current thread must not have acquired it, otherwise deadlock
+ ensues.
.. c:function:: PyThreadState* PyThreadState_Get()
The :mod:`queue` module implements multi-producer, multi-consumer queues.
It is especially useful in threaded 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; see the :mod:`threading`
-module.
+module implements all the required locking semantics.
The module implements three types of queue, which differ only in the order in
which the entries are retrieved. In a :abbr:`FIFO (first-in, first-out)`
_multiprocessing = test.support.import_module('_multiprocessing')
# Skip tests if sem_open implementation is broken.
test.support.import_module('multiprocessing.synchronize')
-# import threading after _multiprocessing to raise a more relevant error
-# message: "No module named _multiprocessing". _multiprocessing is not compiled
-# without thread support.
import threading
import multiprocessing.connection
}
/* This function is used to signal that async exceptions are waiting to be
- raised, therefore it is also useful in non-threaded builds. */
+ raised. */
void
_PyEval_SignalAsyncExc(void)
SIGNAL_ASYNC_EXC();
}
-/* Functions save_thread and restore_thread are always defined so
- dynamically loaded modules needn't be compiled separately for use
- with and without threads: */
-
PyThreadState *
PyEval_SaveThread(void)
{