@@ -447,7 +447,11 @@ Initializing and finalizing the interpreter
447447 freed. Some memory allocated by extension modules may not be freed. Some
448448 extensions may not work properly if their initialization routine is called more
449449 than once; this can happen if an application calls :c:func:`Py_Initialize` and
450- :c:func: `Py_FinalizeEx ` more than once.
450+ :c:func: `Py_FinalizeEx ` more than once. :c:func: `Py_FinalizeEx ` must not be
451+ called recursively from within itself. Therefore, it must not be called by
452+ any code that may be run as part of the interpreter shutdown process, such
453+ as :py:mod: `atexit ` handlers, object finalizers, or any code that may be run
454+ while flushing the stdout and stderr files.
451455
452456 .. audit-event :: cpython._PySys_ClearAuditHooks "" c.Py_FinalizeEx
453457
@@ -1074,6 +1078,37 @@ thread, where the CPython global runtime was originally initialized.
10741078The only exception is if :c:func:`exec` will be called immediately
10751079after.
10761080
1081+ .. _cautions-regarding-runtime-finalization:
1082+
1083+ Cautions regarding runtime finalization
1084+ ---------------------------------------
1085+
1086+ In the late stage of :term:`interpreter shutdown`, after attempting to wait for
1087+ non-daemon threads to exit (though this can be interrupted by
1088+ :class:`KeyboardInterrupt`) and running the :mod:`atexit` functions, the runtime
1089+ is marked as *finalizing*: :c:func:`Py_IsFinalizing` and
1090+ :func:`sys.is_finalizing` return true. At this point, only the *finalization
1091+ thread* that initiated finalization (typically the main thread) is allowed to
1092+ acquire the :term:`GIL`.
1093+
1094+ If any thread, other than the finalization thread, attempts to acquire the GIL
1095+ during finalization, either explicitly via :c:func:`PyGILState_Ensure`,
1096+ :c:macro:`Py_END_ALLOW_THREADS`, :c:func:`PyEval_AcquireThread`, or
1097+ :c:func:`PyEval_AcquireLock`, or implicitly when the interpreter attempts to
1098+ reacquire it after having yielded it, the thread enters **a permanently blocked
1099+ state** where it remains until the program exits. In most cases this is
1100+ harmless, but this can result in deadlock if a later stage of finalization
1101+ attempts to acquire a lock owned by the blocked thread, or otherwise waits on
1102+ the blocked thread.
1103+
1104+ Gross? Yes. This prevents random crashes and/or unexpectedly skipped C++
1105+ finalizations further up the call stack when such threads were forcibly exited
1106+ here in CPython 3.13.7 and earlier. The CPython runtime GIL acquiring C APIs
1107+ have never had any error reporting or handling expectations at GIL acquisition
1108+ time that would've allowed for graceful exit from this situation. Changing that
1109+ would require new stable C APIs and rewriting the majority of C code in the
1110+ CPython ecosystem to use those with error handling.
1111+
10771112
10781113High-level API
10791114--------------
@@ -1093,6 +1128,12 @@ code, or when embedding the Python interpreter:
10931128 interpreter lock is also shared by all threads, regardless of to which
10941129 interpreter they belong.
10951130
1131+ .. versionchanged:: 3.12
1132+
1133+ :pep:`684` introduced the possibility
1134+ of a :ref:`per-interpreter GIL <per-interpreter-gil>`.
1135+ See :c:func:`Py_NewInterpreterFromConfig`.
1136+
10961137
10971138.. c:type:: PyThreadState
10981139
@@ -1147,11 +1188,14 @@ code, or when embedding the Python interpreter:
11471188 ensues.
11481189
11491190 .. note::
1150- Calling this function from a thread when the runtime is finalizing
1151- will terminate the thread, even if the thread was not created by Python.
1152- You can use :c:func:`Py_IsFinalizing` or :func:`sys.is_finalizing` to
1153- check if the interpreter is in process of being finalized before calling
1154- this function to avoid unwanted termination.
1191+ Calling this function from a thread when the runtime is finalizing will
1192+ hang the thread until the program exits, even if the thread was not
1193+ created by Python. Refer to
1194+ :ref:`cautions-regarding-runtime-finalization` for more details.
1195+
1196+ .. versionchanged:: next
1197+ Hangs the current thread, rather than terminating it, if called while the
1198+ interpreter is finalizing.
11551199
11561200.. c:function:: PyThreadState* PyThreadState_Get()
11571201
@@ -1207,11 +1251,14 @@ with sub-interpreters:
12071251 to call arbitrary Python code. Failure is a fatal error.
12081252
12091253 .. note::
1210- Calling this function from a thread when the runtime is finalizing
1211- will terminate the thread, even if the thread was not created by Python.
1212- You can use :c:func:`Py_IsFinalizing` or :func:`sys.is_finalizing` to
1213- check if the interpreter is in process of being finalized before calling
1214- this function to avoid unwanted termination.
1254+ Calling this function from a thread when the runtime is finalizing will
1255+ hang the thread until the program exits, even if the thread was not
1256+ created by Python. Refer to
1257+ :ref:`cautions-regarding-runtime-finalization` for more details.
1258+
1259+ .. versionchanged:: next
1260+ Hangs the current thread, rather than terminating it, if called while the
1261+ interpreter is finalizing.
12151262
12161263.. c:function:: void PyGILState_Release(PyGILState_STATE)
12171264
@@ -1503,17 +1550,20 @@ All of the following functions must be called after :c:func:`Py_Initialize`.
15031550 If this thread already has the lock, deadlock ensues.
15041551
15051552 .. note::
1506- Calling this function from a thread when the runtime is finalizing
1507- will terminate the thread, even if the thread was not created by Python.
1508- You can use :c:func:`Py_IsFinalizing` or :func:`sys.is_finalizing` to
1509- check if the interpreter is in process of being finalized before calling
1510- this function to avoid unwanted termination.
1553+ Calling this function from a thread when the runtime is finalizing will
1554+ hang the thread until the program exits, even if the thread was not
1555+ created by Python. Refer to
1556+ :ref:`cautions-regarding-runtime-finalization` for more details.
15111557
15121558 .. versionchanged:: 3.8
15131559 Updated to be consistent with :c:func:`PyEval_RestoreThread`,
15141560 :c:func:`Py_END_ALLOW_THREADS`, and :c:func:`PyGILState_Ensure`,
15151561 and terminate the current thread if called while the interpreter is finalizing.
15161562
1563+ .. versionchanged:: next
1564+ Hangs the current thread, rather than terminating it, if called while the
1565+ interpreter is finalizing.
1566+
15171567 :c:func:`PyEval_RestoreThread` is a higher-level function which is always
15181568 available (even when threads have not been initialized).
15191569
@@ -1773,6 +1823,8 @@ function. You can create and destroy them using the following functions:
17731823 haven't been explicitly destroyed at that point.
17741824
17751825
1826+ .. _per-interpreter-gil:
1827+
17761828A Per-Interpreter GIL
17771829---------------------
17781830
@@ -1784,7 +1836,7 @@ being blocked by other interpreters or blocking any others. Thus a
17841836single Python process can truly take advantage of multiple CPU cores
17851837when running Python code. The isolation also encourages a different
17861838approach to concurrency than that of just using threads.
1787- (See :pep:`554`.)
1839+ (See :pep:`554` and :pep:`684` .)
17881840
17891841Using an isolated interpreter requires vigilance in preserving that
17901842isolation. That especially means not sharing any objects or mutable
@@ -2352,12 +2404,20 @@ per-object locks for :term:`free-threaded <free threading>` CPython. They are
23522404intended to replace reliance on the :term:`global interpreter lock`, and are
23532405no-ops in versions of Python with the global interpreter lock.
23542406
2407+ Critical sections are intended to be used for custom types implemented
2408+ in C-API extensions. They should generally not be used with built-in types like
2409+ :class:`list` and :class:`dict` because their public C-APIs
2410+ already use critical sections internally, with the notable
2411+ exception of :c:func:`PyDict_Next`, which requires critical section
2412+ to be acquired externally.
2413+
23552414Critical sections avoid deadlocks by implicitly suspending active critical
2356- sections and releasing the locks during calls to :c:func:`PyEval_SaveThread`.
2357- When :c:func:`PyEval_RestoreThread` is called, the most recent critical section
2358- is resumed, and its locks reacquired. This means the critical section API
2359- provides weaker guarantees than traditional locks -- they are useful because
2360- their behavior is similar to the :term:`GIL`.
2415+ sections, hence, they do not provide exclusive access such as provided by
2416+ traditional locks like :c:type:`PyMutex`. When a critical section is started,
2417+ the per-object lock for the object is acquired. If the code executed inside the
2418+ critical section calls C-API functions then it can suspend the critical section thereby
2419+ releasing the per-object lock, so other threads can acquire the per-object lock
2420+ for the same object.
23612421
23622422The functions and structs used by the macros are exposed for cases
23632423where C macros are not available. They should only be used as in the
0 commit comments