Skip to content

Commit 7f5f450

Browse files
authored
Merge branch 'main' into profiling-windows-venv
2 parents c91e40e + f4bda4d commit 7f5f450

113 files changed

Lines changed: 1107 additions & 372 deletions

File tree

Some content is hidden

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

.github/CODEOWNERS

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
.azure-pipelines/ @AA-Turner
6464

6565
# GitHub & related scripts
66-
.github/ @ezio-melotti @hugovk @AA-Turner @webknjaz
66+
.github/ @ezio-melotti @hugovk @AA-Turner @webknjaz @itamaro
6767
Tools/build/compute-changes.py @AA-Turner @hugovk @webknjaz
6868
Lib/test/test_tools/test_compute_changes.py @AA-Turner @hugovk @webknjaz
6969
Tools/build/verify_ensurepip_wheels.py @AA-Turner @pfmoore @pradyunsg
@@ -73,19 +73,19 @@ Tools/build/verify_ensurepip_wheels.py @AA-Turner @pfmoore @pradyunsg
7373
.ruff.toml @hugovk @AlexWaygood @AA-Turner
7474

7575
# Patchcheck
76-
Tools/patchcheck/ @AA-Turner
76+
Tools/patchcheck/ @AA-Turner @itamaro
7777

7878

7979
# ----------------------------------------------------------------------------
8080
# Build System
8181
# ----------------------------------------------------------------------------
8282

8383
# Autotools
84-
configure* @erlend-aasland @corona10 @AA-Turner @emmatyping
85-
Makefile.pre.in @erlend-aasland @AA-Turner @emmatyping
86-
Modules/makesetup @erlend-aasland @AA-Turner @emmatyping
87-
Modules/Setup* @erlend-aasland @AA-Turner @emmatyping
88-
Tools/build/regen-configure.sh @AA-Turner
84+
configure* @erlend-aasland @corona10 @AA-Turner @emmatyping @itamaro
85+
Makefile.pre.in @erlend-aasland @AA-Turner @emmatyping @itamaro
86+
Modules/makesetup @erlend-aasland @AA-Turner @emmatyping @itamaro
87+
Modules/Setup* @erlend-aasland @AA-Turner @emmatyping @itamaro
88+
Tools/build/regen-configure.sh @AA-Turner @itamaro
8989

9090
# generate-build-details
9191
Tools/build/generate-build-details.py @FFY00

Doc/c-api/threads.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -736,10 +736,10 @@ Low-level APIs
736736
.. c:function:: PyObject* PyThreadState_GetDict()
737737
738738
Return a dictionary in which extensions can store thread-specific state
739-
information. Each extension should use a unique key to use to store state in
739+
information. Each extension should use a unique key to store a state in
740740
the dictionary. It is okay to call this function when no :term:`thread state`
741741
is :term:`attached <attached thread state>`. If this function returns
742-
``NULL``, no exception has been raised and the caller should assume no
742+
``NULL`` and no exception has been raised, then the caller should assume no
743743
thread state is attached.
744744
745745

Doc/conf.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,6 @@
349349
\sphinxstrong{Python Software Foundation}\\
350350
Email: \sphinxemail{docs@python.org}
351351
}
352-
\let\Verbatim=\OriginalVerbatim
353-
\let\endVerbatim=\endOriginalVerbatim
354352
\setcounter{tocdepth}{2}
355353
''',
356354
# The paper size ('letterpaper' or 'a4paper').

Doc/deprecations/pending-removal-in-3.21.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
Pending removal in Python 3.21
22
------------------------------
33

4+
* :mod:`abc`
5+
6+
* Soft-deprecated since Python 3.3 :class:`abc.abstractclassmethod`,
7+
:class:`abc.abstractstaticmethod`, and :class:`abc.abstractproperty`
8+
now raise a :exc:`DeprecationWarning`.
9+
These classes will be removed in Python 3.21, instead
10+
use :func:`abc.abstractmethod` with :func:`classmethod`,
11+
:func:`staticmethod`, and :class:`property` respectively.
12+
413
* :mod:`ast`:
514

615
* Classes ``slice``, ``Index``, ``ExtSlice``, ``Suite``, ``Param``,

Doc/howto/free-threading-python.rst

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,3 +165,132 @@ to false. If the flag is true then the :class:`warnings.catch_warnings`
165165
context manager uses a context variable for warning filters. If the flag is
166166
false then :class:`~warnings.catch_warnings` modifies the global filters list,
167167
which is not thread-safe. See the :mod:`warnings` module for more details.
168+
169+
170+
Increased memory usage
171+
----------------------
172+
173+
The free-threaded build will typically use more memory compared to the default
174+
build. There are multiple reasons for this, mostly due to design decisions.
175+
176+
177+
All interned strings are immortal
178+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
179+
180+
For modern Python versions (since version 2.3), interning a string (e.g. with
181+
:func:`sys.intern`) does not cause it to become immortal. Instead, if the last
182+
reference to that string disappears, it will be removed from the interned
183+
string table. This is not the case for the free-threaded build and any interned
184+
string will become immortal, surviving until interpreter shutdown.
185+
186+
187+
Non-GC objects have a larger object header
188+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
189+
190+
The free-threaded build uses a different :c:type:`PyObject` structure. Instead
191+
of having the GC related information allocated before the :c:type:`PyObject`
192+
structure, like in the default build, the GC related info is part of the normal
193+
object header. For example, on the AMD64 platform, ``None`` uses 32 bytes on
194+
the free-threaded build vs 16 bytes for the default build. GC objects (such as
195+
dicts and lists) are the same size for both builds since the free-threaded
196+
build does not use additional space for the GC info.
197+
198+
199+
QSBR can delay freeing of memory
200+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
201+
202+
In order to safely implement lock-free data structures, a safe memory
203+
reclamation (SMR) scheme is used, known as quiescent state-based reclamation
204+
(QSBR). This means that the memory backing data structures allowing lock-free
205+
access will use QSBR, which defers the free operation, rather than immediately
206+
freeing the memory. Two examples of these data structures are the list object
207+
and the dictionary keys object. See ``InternalDocs/qsbr.md`` in the CPython
208+
source tree for more details on how QSBR is implemented. Running
209+
:func:`gc.collect` should cause all memory being held by QSBR to be actually
210+
freed. Note that even when QSBR frees the memory, the underlying memory
211+
allocator may not immediately return that memory to the OS and so the resident
212+
set size (RSS) of the process might not decrease.
213+
214+
215+
mimalloc allocator vs pymalloc
216+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
217+
218+
The default build will normally use the "pymalloc" memory allocator for small
219+
allocations (512 bytes or smaller). The free-threaded build does not use
220+
pymalloc and allocates all Python objects using the "mimalloc" allocator. The
221+
pymalloc allocator has the following properties that help keep memory usage
222+
low: small per-allocated-block overhead, effective memory fragmentation
223+
prevention, and quick return of free memory to the operating system. The
224+
mimalloc allocator does quite well in these respects as well but can have some
225+
more overhead.
226+
227+
In the free-threaded build, mimalloc manages memory in a number of separate
228+
heaps (currently four). For example, all GC supporting objects are allocated
229+
from their own heap. Using separate heaps means that free memory in one heap
230+
cannot be used for an allocation that uses another heap. Also, some heaps are
231+
configured to use QSBR (quiescent-state based reclamation) when freeing the
232+
memory that backs up the heap (known as "pages" in mimalloc terminology). The
233+
use of QSBR creates a delay between all memory blocks for a page being freed
234+
and the memory page being released, either for new allocations or back to the
235+
OS.
236+
237+
The mimalloc allocator also defers returning freed memory back to the OS. You
238+
can reduce that delay by setting the environment variable
239+
:envvar:`!MIMALLOC_PURGE_DELAY` to ``0``. Note that this will likely reduce
240+
the performance of the allocator.
241+
242+
243+
Free-threaded reference counting can cause objects to live longer
244+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
245+
246+
In the default build, when an object's reference count reaches zero, it is
247+
normally deallocated. The free-threaded build uses "biased reference
248+
counting", with a fast-path for objects "owned" by the current thread and a
249+
slow path for other objects. See :pep:`703` for additional details. Any time
250+
an object's reference count ends up in a "queued" state, deallocation can be
251+
deferred. The queued state is cleared from the "eval breaker" section of the
252+
bytecode evaluator.
253+
254+
The free-threaded build also allows a different mode of reference counting,
255+
known as "deferred reference counting". This mode is enabled by setting a flag
256+
on a per-object basis. Deferred reference counting is enabled for the
257+
following types:
258+
259+
* module objects
260+
* module top-level functions
261+
* class methods defined in the class scope
262+
* descriptor objects
263+
* thread-local objects, created by :class:`threading.local`
264+
265+
When deferred reference counting is enabled, references from Python function
266+
stacks are not added to the reference count. This scheme reduces the overhead
267+
of reference counting, especially for objects used from multiple threads.
268+
Because the stack references are not counted, objects with deferred reference
269+
counting are not immediately freed when their internal reference count goes to
270+
zero. Instead, they are examined by the next GC run and, if no stack
271+
references to them are found, they are freed. This means these objects are
272+
freed by the GC and not when their reference count goes to zero, as is typical.
273+
274+
275+
Per-thread reference counting can delay freeing objects
276+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
277+
278+
To avoid contention on the reference count fields of frequently shared
279+
objects, the free-threaded build also uses "per-thread reference counting"
280+
for a few selected object types. Rather than updating a single shared
281+
reference count, each thread maintains its own local reference count array,
282+
indexed by a unique id assigned to the object. The true reference count is
283+
only computed by summing the per-thread counts when the object's local
284+
count drops to zero. Per-thread reference counting is currently used for:
285+
286+
* heap type objects (classes created in Python)
287+
* code objects
288+
* the ``__dict__`` of module objects
289+
290+
Because the per-thread counts must be merged back to the object before it
291+
can be deallocated, objects using per-thread reference counting are
292+
typically freed later than they would be in the default build. In
293+
particular, such an object is usually not freed until the thread that
294+
referenced it reaches a safe point (for example, in the "eval breaker"
295+
section of the bytecode evaluator) or exits. Running :func:`gc.collect`
296+
will merge the per-thread counts and allow these objects to be freed.

Doc/library/abc.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ The :mod:`!abc` module also supports the following legacy decorators:
237237
.. decorator:: abstractclassmethod
238238

239239
.. versionadded:: 3.2
240-
.. deprecated:: 3.3
240+
.. deprecated-removed:: 3.3 3.21
241241
It is now possible to use :class:`classmethod` with
242242
:func:`abstractmethod`, making this decorator redundant.
243243

@@ -258,7 +258,7 @@ The :mod:`!abc` module also supports the following legacy decorators:
258258
.. decorator:: abstractstaticmethod
259259

260260
.. versionadded:: 3.2
261-
.. deprecated:: 3.3
261+
.. deprecated-removed:: 3.3 3.21
262262
It is now possible to use :class:`staticmethod` with
263263
:func:`abstractmethod`, making this decorator redundant.
264264

@@ -278,7 +278,7 @@ The :mod:`!abc` module also supports the following legacy decorators:
278278

279279
.. decorator:: abstractproperty
280280

281-
.. deprecated:: 3.3
281+
.. deprecated-removed:: 3.3 3.21
282282
It is now possible to use :class:`property`, :meth:`property.getter`,
283283
:meth:`property.setter` and :meth:`property.deleter` with
284284
:func:`abstractmethod`, making this decorator redundant.

Doc/library/binascii.rst

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -367,9 +367,8 @@ The :mod:`!binascii` module defines the following functions:
367367
*ignorechars* should be a :term:`bytes-like object` containing characters
368368
to ignore from the input.
369369

370-
Similar functionality (accepting only text string arguments, but more
371-
liberal towards whitespace) is also accessible using the
372-
:meth:`bytes.fromhex` class method.
370+
Similar functionality (but more liberal towards whitespace) is also accessible
371+
using the :meth:`bytes.fromhex` class method.
373372

374373
.. versionchanged:: 3.15
375374
Added the *ignorechars* parameter.

Doc/library/copy.rst

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,13 @@ file, socket, window, or any similar types. It does "copy" functions and
7272
classes (shallow and deeply), by returning the original object unchanged; this
7373
is compatible with the way these are treated by the :mod:`pickle` module.
7474

75-
Shallow copies of dictionaries can be made using :meth:`dict.copy`, and
76-
of lists by assigning a slice of the entire list, for example,
77-
``copied_list = original_list[:]``.
75+
Shallow copies of many collections can be made using the corresponding
76+
:meth:`!copy` method (such as :meth:`list.copy`, :meth:`dict.copy` or
77+
:meth:`set.copy`), and of sequences (such as lists or bytearrays) by making
78+
a slice of the entire sequence (``sequence[:]``).
79+
However, these methods and slicing can create an instance of the base type
80+
when copying an instance of a subclass, whereas :func:`copy.copy` normally
81+
returns an instance of the same type.
7882

7983
.. index:: pair: module; pickle
8084

Doc/library/ctypes.rst

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ used to wrap these libraries in pure Python.
1414

1515
.. include:: ../includes/optional-module.rst
1616

17+
.. warning::
18+
19+
:mod:`!ctypes` provides low-level access to native libraries and the
20+
process's memory, bypassing Python's safety mechanisms and allowing
21+
execution of arbitrary native code.
22+
Incorrect use can corrupt data and objects, reveal sensitive information,
23+
cause crashes, or otherwise compromise the running process.
24+
1725

1826
.. _ctypes-ctypes-tutorial:
1927

@@ -198,10 +206,8 @@ argument values::
198206
OSError: exception: access violation reading 0x00000020
199207
>>>
200208

201-
There are, however, enough ways to crash Python with :mod:`!ctypes`, so you
202-
should be careful anyway. The :mod:`faulthandler` module can be helpful in
203-
debugging crashes (e.g. from segmentation faults produced by erroneous C library
204-
calls).
209+
The :mod:`faulthandler` module can help debug crashes,
210+
such as segmentation faults produced by erroneous C library calls.
205211

206212
``None``, integers, bytes objects and (unicode) strings are the only native
207213
Python objects that can directly be used as parameters in these function calls.

Doc/library/email.headerregistry.rst

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,10 @@ headers.
9393
``kwds`` is a dictionary containing one pre-initialized key, ``defects``.
9494
``defects`` is an empty list. The parse method should append any detected
9595
defects to this list. On return, the ``kwds`` dictionary *must* contain
96-
values for at least the keys ``decoded`` and ``defects``. ``decoded``
97-
should be the string value for the header (that is, the header value fully
98-
decoded to unicode). The parse method should assume that *string* may
96+
values for at least the keys ``decoded``, ``defects`` and ``parse_tree``.
97+
``decoded`` should be the string value for the header (that is, the header
98+
value fully decoded to unicode). ``parse_tree`` is set to the parse tree obtained
99+
from parsing the header. The parse method should assume that *string* may
99100
contain content-transfer-encoded parts, but should correctly handle all valid
100101
unicode characters as well so that it can parse un-encoded header values.
101102

0 commit comments

Comments
 (0)