◐ Shell
clean mode source ↗

gh-105182: Remove PyEval_AcquireLock() and PyEval_InitThreads() by vstinner · Pull Request #105183 · python/cpython

Expand Up @@ -59,7 +59,7 @@ The following functions can be safely called before Python is initialized: :c:func:`Py_Initialize`: :c:func:`Py_EncodeLocale`, :c:func:`Py_GetPath`, :c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`, :c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome`, :c:func:`Py_GetProgramName` and :c:func:`PyEval_InitThreads`. and :c:func:`Py_GetProgramName`.

.. _global-conf-vars: Expand Down Expand Up @@ -326,7 +326,6 @@ Initializing and finalizing the interpreter .. c:function:: void Py_Initialize()
.. index:: single: PyEval_InitThreads() single: modules (in module sys) single: path (in module sys) pair: module; builtins Expand Down Expand Up @@ -813,45 +812,6 @@ code, or when embedding the Python interpreter: this thread's interpreter state.

.. c:function:: void PyEval_InitThreads()
.. index:: single: PyEval_AcquireThread() single: PyEval_ReleaseThread() single: PyEval_SaveThread() single: PyEval_RestoreThread()
Deprecated function which does nothing.
In Python 3.6 and older, this function created the GIL if it didn't exist.
.. versionchanged:: 3.9 The function now does nothing.
.. versionchanged:: 3.7 This function is now called by :c:func:`Py_Initialize()`, so you don't have to call it yourself anymore.
.. versionchanged:: 3.2 This function cannot be called before :c:func:`Py_Initialize()` anymore.
.. deprecated:: 3.9
.. index:: pair: module; _thread

.. c:function:: int PyEval_ThreadsInitialized()
Returns a non-zero value if :c:func:`PyEval_InitThreads` has been called. This function can be called without holding the GIL, and therefore can be used to avoid calls to the locking API when running single-threaded.
.. versionchanged:: 3.7 The :term:`GIL` is now initialized by :c:func:`Py_Initialize()`.
.. deprecated:: 3.9

.. c:function:: PyThreadState* PyEval_SaveThread()
Release the global interpreter lock (if it has been created) and reset the Expand Down Expand Up @@ -1223,39 +1183,6 @@ All of the following functions must be called after :c:func:`Py_Initialize`. available (even when threads have not been initialized).

.. c:function:: void PyEval_AcquireLock()
Acquire the global interpreter lock. The lock must have been created earlier. If this thread already has the lock, a deadlock ensues.
.. deprecated:: 3.2 This function does not update the current thread state. Please use :c:func:`PyEval_RestoreThread` or :c:func:`PyEval_AcquireThread` instead.
.. note:: Calling this function from a thread when the runtime is finalizing will terminate the thread, even if the thread was not created by Python. You can use :c:func:`_Py_IsFinalizing` or :func:`sys.is_finalizing` to check if the interpreter is in process of being finalized before calling this function to avoid unwanted termination.
.. versionchanged:: 3.8 Updated to be consistent with :c:func:`PyEval_RestoreThread`, :c:func:`Py_END_ALLOW_THREADS`, and :c:func:`PyGILState_Ensure`, and terminate the current thread if called while the interpreter is finalizing.

.. c:function:: void PyEval_ReleaseLock()
Release the global interpreter lock. The lock must have been created earlier.
.. deprecated:: 3.2 This function does not update the current thread state. Please use :c:func:`PyEval_SaveThread` or :c:func:`PyEval_ReleaseThread` instead.

.. _sub-interpreter-support:
Sub-interpreter support Expand Down