Skip to content

Commit f3b9074

Browse files
committed
Merge branch 'main' into virtual-iterators
2 parents 37ca285 + 605022a commit f3b9074

File tree

380 files changed

+7874
-5852
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

380 files changed

+7874
-5852
lines changed

.github/workflows/mypy.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@ on:
1313
- "Lib/test/libregrtest/**"
1414
- "Lib/tomllib/**"
1515
- "Misc/mypy/**"
16+
- "Tools/build/compute-changes.py"
17+
- "Tools/build/deepfreeze.py"
1618
- "Tools/build/generate_sbom.py"
19+
- "Tools/build/generate-build-details.py"
20+
- "Tools/build/verify_ensurepip_wheels.py"
21+
- "Tools/build/update_file.py"
22+
- "Tools/build/umarshal.py"
1723
- "Tools/cases_generator/**"
1824
- "Tools/clinic/**"
1925
- "Tools/jit/**"

.github/workflows/reusable-context.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ jobs:
9797
run: python Tools/build/compute-changes.py
9898
env:
9999
GITHUB_DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
100+
GITHUB_EVENT_NAME: ${{ github.event_name }}
100101
CCF_TARGET_REF: ${{ github.base_ref || github.event.repository.default_branch }}
101102
CCF_HEAD_REF: ${{ github.event.pull_request.head.sha || github.sha }}
102103

.pre-commit-config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ repos:
4747
exclude: Lib/test/tokenizedata/coding20731.py
4848
- id: trailing-whitespace
4949
types_or: [c, inc, python, rst]
50+
- id: trailing-whitespace
51+
files: '\.(gram)$'
5052

5153
- repo: https://github.com/python-jsonschema/check-jsonschema
5254
rev: 0.33.0

Doc/c-api/gcsupport.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,9 @@ provided. In order to use this macro, the :c:member:`~PyTypeObject.tp_traverse`
180180
must name its arguments exactly *visit* and *arg*:
181181
182182
183-
.. c:function:: void Py_VISIT(PyObject *o)
183+
.. c:macro:: Py_VISIT(o)
184184
185-
If *o* is not ``NULL``, call the *visit* callback, with arguments *o*
185+
If the :c:expr:`PyObject *` *o* is not ``NULL``, call the *visit* callback, with arguments *o*
186186
and *arg*. If *visit* returns a non-zero value, then return it.
187187
Using this macro, :c:member:`~PyTypeObject.tp_traverse` handlers
188188
look like::

Doc/c-api/import.rst

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,6 @@ Importing Modules
1616
This is a wrapper around :c:func:`PyImport_Import()` which takes a
1717
:c:expr:`const char *` as an argument instead of a :c:expr:`PyObject *`.
1818
19-
.. c:function:: PyObject* PyImport_ImportModuleNoBlock(const char *name)
20-
21-
This function is a deprecated alias of :c:func:`PyImport_ImportModule`.
22-
23-
.. versionchanged:: 3.3
24-
This function used to fail immediately when the import lock was held
25-
by another thread. In Python 3.3 though, the locking scheme switched
26-
to per-module locks for most purposes, so this function's special
27-
behaviour isn't needed anymore.
28-
29-
.. deprecated-removed:: 3.13 3.15
30-
Use :c:func:`PyImport_ImportModule` instead.
31-
3219
3320
.. c:function:: PyObject* PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
3421

Doc/c-api/init.rst

Lines changed: 53 additions & 176 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,7 @@ The following functions can be safely called before Python is initialized:
7777

7878
Despite their apparent similarity to some of the functions listed above,
7979
the following functions **should not be called** before the interpreter has
80-
been initialized: :c:func:`Py_EncodeLocale`, :c:func:`Py_GetPath`,
81-
:c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`,
82-
:c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome`,
83-
:c:func:`Py_GetProgramName`, :c:func:`PyEval_InitThreads`, and
80+
been initialized: :c:func:`Py_EncodeLocale`, :c:func:`PyEval_InitThreads`, and
8481
:c:func:`Py_RunMain`.
8582

8683

@@ -145,9 +142,6 @@ to 1 and ``-bb`` sets :c:data:`Py_BytesWarningFlag` to 2.
145142
:c:member:`PyConfig.pathconfig_warnings` should be used instead, see
146143
:ref:`Python Initialization Configuration <init-config>`.
147144

148-
Suppress error messages when calculating the module search path in
149-
:c:func:`Py_GetPath`.
150-
151145
Private flag used by ``_freeze_module`` and ``frozenmain`` programs.
152146

153147
.. deprecated-removed:: 3.12 3.15
@@ -203,7 +197,7 @@ to 1 and ``-bb`` sets :c:data:`Py_BytesWarningFlag` to 2.
203197

204198
Set by the :option:`-i` option.
205199

206-
.. deprecated:: 3.12
200+
.. deprecated-removed:: 3.12 3.15
207201

208202
.. c:var:: int Py_IsolatedFlag
209203
@@ -586,7 +580,6 @@ Process-wide parameters
586580
.. index::
587581
single: Py_Initialize()
588582
single: main()
589-
single: Py_GetPath()
590583
591584
This API is kept for backward compatibility: setting
592585
:c:member:`PyConfig.program_name` should be used instead, see :ref:`Python
@@ -596,7 +589,7 @@ Process-wide parameters
596589
the first time, if it is called at all. It tells the interpreter the value
597590
of the ``argv[0]`` argument to the :c:func:`main` function of the program
598591
(converted to wide characters).
599-
This is used by :c:func:`Py_GetPath` and some other functions below to find
592+
This is used by some other functions below to find
600593
the Python run-time libraries relative to the interpreter executable. The
601594
default value is ``'python'``. The argument should point to a
602595
zero-terminated wide character string in static storage whose contents will not
@@ -609,146 +602,6 @@ Process-wide parameters
609602
.. deprecated-removed:: 3.11 3.15
610603
611604
612-
.. c:function:: wchar_t* Py_GetProgramName()
613-
614-
Return the program name set with :c:member:`PyConfig.program_name`, or the default.
615-
The returned string points into static storage; the caller should not modify its
616-
value.
617-
618-
This function should not be called before :c:func:`Py_Initialize`, otherwise
619-
it returns ``NULL``.
620-
621-
.. versionchanged:: 3.10
622-
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
623-
624-
.. deprecated-removed:: 3.13 3.15
625-
Use :c:func:`PyConfig_Get("executable") <PyConfig_Get>`
626-
(:data:`sys.executable`) instead.
627-
628-
629-
.. c:function:: wchar_t* Py_GetPrefix()
630-
631-
Return the *prefix* for installed platform-independent files. This is derived
632-
through a number of complicated rules from the program name set with
633-
:c:member:`PyConfig.program_name` and some environment variables; for example, if the
634-
program name is ``'/usr/local/bin/python'``, the prefix is ``'/usr/local'``. The
635-
returned string points into static storage; the caller should not modify its
636-
value. This corresponds to the :makevar:`prefix` variable in the top-level
637-
:file:`Makefile` and the :option:`--prefix` argument to the :program:`configure`
638-
script at build time. The value is available to Python code as ``sys.base_prefix``.
639-
It is only useful on Unix. See also the next function.
640-
641-
This function should not be called before :c:func:`Py_Initialize`, otherwise
642-
it returns ``NULL``.
643-
644-
.. versionchanged:: 3.10
645-
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
646-
647-
.. deprecated-removed:: 3.13 3.15
648-
Use :c:func:`PyConfig_Get("base_prefix") <PyConfig_Get>`
649-
(:data:`sys.base_prefix`) instead. Use :c:func:`PyConfig_Get("prefix")
650-
<PyConfig_Get>` (:data:`sys.prefix`) if :ref:`virtual environments
651-
<venv-def>` need to be handled.
652-
653-
654-
.. c:function:: wchar_t* Py_GetExecPrefix()
655-
656-
Return the *exec-prefix* for installed platform-*dependent* files. This is
657-
derived through a number of complicated rules from the program name set with
658-
:c:member:`PyConfig.program_name` and some environment variables; for example, if the
659-
program name is ``'/usr/local/bin/python'``, the exec-prefix is
660-
``'/usr/local'``. The returned string points into static storage; the caller
661-
should not modify its value. This corresponds to the :makevar:`exec_prefix`
662-
variable in the top-level :file:`Makefile` and the ``--exec-prefix``
663-
argument to the :program:`configure` script at build time. The value is
664-
available to Python code as ``sys.base_exec_prefix``. It is only useful on
665-
Unix.
666-
667-
Background: The exec-prefix differs from the prefix when platform dependent
668-
files (such as executables and shared libraries) are installed in a different
669-
directory tree. In a typical installation, platform dependent files may be
670-
installed in the :file:`/usr/local/plat` subtree while platform independent may
671-
be installed in :file:`/usr/local`.
672-
673-
Generally speaking, a platform is a combination of hardware and software
674-
families, e.g. Sparc machines running the Solaris 2.x operating system are
675-
considered the same platform, but Intel machines running Solaris 2.x are another
676-
platform, and Intel machines running Linux are yet another platform. Different
677-
major revisions of the same operating system generally also form different
678-
platforms. Non-Unix operating systems are a different story; the installation
679-
strategies on those systems are so different that the prefix and exec-prefix are
680-
meaningless, and set to the empty string. Note that compiled Python bytecode
681-
files are platform independent (but not independent from the Python version by
682-
which they were compiled!).
683-
684-
System administrators will know how to configure the :program:`mount` or
685-
:program:`automount` programs to share :file:`/usr/local` between platforms
686-
while having :file:`/usr/local/plat` be a different filesystem for each
687-
platform.
688-
689-
This function should not be called before :c:func:`Py_Initialize`, otherwise
690-
it returns ``NULL``.
691-
692-
.. versionchanged:: 3.10
693-
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
694-
695-
.. deprecated-removed:: 3.13 3.15
696-
Use :c:func:`PyConfig_Get("base_exec_prefix") <PyConfig_Get>`
697-
(:data:`sys.base_exec_prefix`) instead. Use
698-
:c:func:`PyConfig_Get("exec_prefix") <PyConfig_Get>`
699-
(:data:`sys.exec_prefix`) if :ref:`virtual environments <venv-def>` need
700-
to be handled.
701-
702-
.. c:function:: wchar_t* Py_GetProgramFullPath()
703-
704-
.. index::
705-
single: executable (in module sys)
706-
707-
Return the full program name of the Python executable; this is computed as a
708-
side-effect of deriving the default module search path from the program name
709-
(set by :c:member:`PyConfig.program_name`). The returned string points into
710-
static storage; the caller should not modify its value. The value is available
711-
to Python code as ``sys.executable``.
712-
713-
This function should not be called before :c:func:`Py_Initialize`, otherwise
714-
it returns ``NULL``.
715-
716-
.. versionchanged:: 3.10
717-
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
718-
719-
.. deprecated-removed:: 3.13 3.15
720-
Use :c:func:`PyConfig_Get("executable") <PyConfig_Get>`
721-
(:data:`sys.executable`) instead.
722-
723-
724-
.. c:function:: wchar_t* Py_GetPath()
725-
726-
.. index::
727-
triple: module; search; path
728-
single: path (in module sys)
729-
730-
Return the default module search path; this is computed from the program name
731-
(set by :c:member:`PyConfig.program_name`) and some environment variables.
732-
The returned string consists of a series of directory names separated by a
733-
platform dependent delimiter character. The delimiter character is ``':'``
734-
on Unix and macOS, ``';'`` on Windows. The returned string points into
735-
static storage; the caller should not modify its value. The list
736-
:data:`sys.path` is initialized with this value on interpreter startup; it
737-
can be (and usually is) modified later to change the search path for loading
738-
modules.
739-
740-
This function should not be called before :c:func:`Py_Initialize`, otherwise
741-
it returns ``NULL``.
742-
743-
.. XXX should give the exact rules
744-
745-
.. versionchanged:: 3.10
746-
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
747-
748-
.. deprecated-removed:: 3.13 3.15
749-
Use :c:func:`PyConfig_Get("module_search_paths") <PyConfig_Get>`
750-
(:data:`sys.path`) instead.
751-
752605
.. c:function:: const char* Py_GetVersion()
753606
754607
Return the version of this Python interpreter. This is a string that looks
@@ -919,23 +772,6 @@ Process-wide parameters
919772
.. deprecated-removed:: 3.11 3.15
920773
921774
922-
.. c:function:: wchar_t* Py_GetPythonHome()
923-
924-
Return the default "home", that is, the value set by
925-
:c:member:`PyConfig.home`, or the value of the :envvar:`PYTHONHOME`
926-
environment variable if it is set.
927-
928-
This function should not be called before :c:func:`Py_Initialize`, otherwise
929-
it returns ``NULL``.
930-
931-
.. versionchanged:: 3.10
932-
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
933-
934-
.. deprecated-removed:: 3.13 3.15
935-
Use :c:func:`PyConfig_Get("home") <PyConfig_Get>` or the
936-
:envvar:`PYTHONHOME` environment variable instead.
937-
938-
939775
.. _threads:
940776
941777
Thread State and the Global Interpreter Lock
@@ -1083,8 +919,36 @@ Note that the ``PyGILState_*`` functions assume there is only one global
1083919
interpreter (created automatically by :c:func:`Py_Initialize`). Python
1084920
supports the creation of additional interpreters (using
1085921
:c:func:`Py_NewInterpreter`), but mixing multiple interpreters and the
1086-
``PyGILState_*`` API is unsupported.
922+
``PyGILState_*`` API is unsupported. This is because :c:func:`PyGILState_Ensure`
923+
and similar functions default to :term:`attaching <attached thread state>` a
924+
:term:`thread state` for the main interpreter, meaning that the thread can't safely
925+
interact with the calling subinterpreter.
926+
927+
Supporting subinterpreters in non-Python threads
928+
------------------------------------------------
929+
930+
If you would like to support subinterpreters with non-Python created threads, you
931+
must use the ``PyThreadState_*`` API instead of the traditional ``PyGILState_*``
932+
API.
933+
934+
In particular, you must store the interpreter state from the calling
935+
function and pass it to :c:func:`PyThreadState_New`, which will ensure that
936+
the :term:`thread state` is targeting the correct interpreter::
937+
938+
/* The return value of PyInterpreterState_Get() from the
939+
function that created this thread. */
940+
PyInterpreterState *interp = ThreadData->interp;
941+
PyThreadState *tstate = PyThreadState_New(interp);
942+
PyThreadState_Swap(tstate);
943+
944+
/* GIL of the subinterpreter is now held.
945+
Perform Python actions here. */
946+
result = CallSomeFunction();
947+
/* evaluate result or handle exception */
1087948
949+
/* Destroy the thread state. No Python API allowed beyond this point. */
950+
PyThreadState_Clear(tstate);
951+
PyThreadState_DeleteCurrent();
1088952
1089953
.. _fork-and-threads:
1090954
@@ -1261,6 +1125,10 @@ code, or when embedding the Python interpreter:
12611125
.. seealso:
12621126
:c:func:`PyEval_ReleaseThread`
12631127
1128+
.. note::
1129+
Similar to :c:func:`PyGILState_Ensure`, this function will hang the
1130+
thread if the runtime is finalizing.
1131+
12641132
12651133
The following functions use thread-local storage, and are not compatible
12661134
with sub-interpreters:
@@ -1287,10 +1155,10 @@ with sub-interpreters:
12871155
When the function returns, there will be an :term:`attached thread state`
12881156
and the thread will be able to call arbitrary Python code. Failure is a fatal error.
12891157
1290-
.. note::
1291-
Calling this function from a thread when the runtime is finalizing will
1292-
hang the thread until the program exits, even if the thread was not
1293-
created by Python. Refer to
1158+
.. warning::
1159+
Calling this function when the runtime is finalizing is unsafe. Doing
1160+
so will either hang the thread until the program ends, or fully crash
1161+
the interpreter in rare cases. Refer to
12941162
:ref:`cautions-regarding-runtime-finalization` for more details.
12951163
12961164
.. versionchanged:: 3.14
@@ -1307,28 +1175,37 @@ with sub-interpreters:
13071175
Every call to :c:func:`PyGILState_Ensure` must be matched by a call to
13081176
:c:func:`PyGILState_Release` on the same thread.
13091177
1310-
13111178
.. c:function:: PyThreadState* PyGILState_GetThisThreadState()
13121179
13131180
Get the :term:`attached thread state` for this thread. May return ``NULL`` if no
13141181
GILState API has been used on the current thread. Note that the main thread
13151182
always has such a thread-state, even if no auto-thread-state call has been
13161183
made on the main thread. This is mainly a helper/diagnostic function.
13171184
1318-
.. seealso: :c:func:`PyThreadState_Get``
1185+
.. note::
1186+
This function does not account for :term:`thread states <thread state>` created
1187+
by something other than :c:func:`PyGILState_Ensure` (such as :c:func:`PyThreadState_New`).
1188+
Prefer :c:func:`PyThreadState_Get` or :c:func:`PyThreadState_GetUnchecked`
1189+
for most cases.
13191190
1191+
.. seealso: :c:func:`PyThreadState_Get``
13201192
13211193
.. c:function:: int PyGILState_Check()
13221194
13231195
Return ``1`` if the current thread is holding the :term:`GIL` and ``0`` otherwise.
13241196
This function can be called from any thread at any time.
1325-
Only if it has had its Python thread state initialized and currently is
1326-
holding the :term:`GIL` will it return ``1``.
1197+
Only if it has had its :term:`thread state <attached thread state>` initialized
1198+
via :c:func:`PyGILState_Ensure` will it return ``1``.
13271199
This is mainly a helper/diagnostic function. It can be useful
13281200
for example in callback contexts or memory allocation functions when
13291201
knowing that the :term:`GIL` is locked can allow the caller to perform sensitive
13301202
actions or otherwise behave differently.
13311203
1204+
.. note::
1205+
If the current Python process has ever created a subinterpreter, this
1206+
function will *always* return ``1``. Prefer :c:func:`PyThreadState_GetUnchecked`
1207+
for most cases.
1208+
13321209
.. versionadded:: 3.4
13331210
13341211

0 commit comments

Comments
 (0)