Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf3b9074

Browse files
committed
Merge branch 'main' into virtual-iterators
2 parents37ca285 +605022a commitf3b9074

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::voidPy_VISIT(PyObject *o)
183+
..c:macro:: Py_VISIT(o)
184184
185-
If *o* is not ``NULL``, call the *visit* callback, with arguments *o*
185+
Ifthe: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` andsome 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 functionfrom a threadwhen the runtime is finalizingwill
1292-
hang the thread until the programexits, even if the thread was not
1293-
created by Python. Refer to
1158+
..warning::
1159+
Calling this function when the runtime is finalizingis unsafe. Doing
1160+
so will eitherhang the thread until the programends, 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 itsPythonthread stateinitialized 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)

[8]ページ先頭

©2009-2025 Movatter.jp