@@ -1128,6 +1128,12 @@ code, or when embedding the Python interpreter:
1128
1128
interpreter lock is also shared by all threads, regardless of to which
1129
1129
interpreter they belong.
1130
1130
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
+
1131
1137
1132
1138
.. c:type:: PyThreadState
1133
1139
@@ -1817,6 +1823,8 @@ function. You can create and destroy them using the following functions:
1817
1823
haven't been explicitly destroyed at that point.
1818
1824
1819
1825
1826
+ .. _per-interpreter-gil:
1827
+
1820
1828
A Per-Interpreter GIL
1821
1829
---------------------
1822
1830
@@ -1828,7 +1836,7 @@ being blocked by other interpreters or blocking any others. Thus a
1828
1836
single Python process can truly take advantage of multiple CPU cores
1829
1837
when running Python code. The isolation also encourages a different
1830
1838
approach to concurrency than that of just using threads.
1831
- (See :pep:`554`.)
1839
+ (See :pep:`554` and :pep:`684` .)
1832
1840
1833
1841
Using an isolated interpreter requires vigilance in preserving that
1834
1842
isolation. That especially means not sharing any objects or mutable