Skip to content

[3.14] gh-128002: add what's new docs for asyncio (GH-134324) #134362

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 20, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions Doc/whatsnew/3.14.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1997,11 +1997,19 @@ Optimizations
asyncio
-------

* :mod:`asyncio` now uses double linked list implementation for native tasks
which speeds up execution by 10% on standard pyperformance benchmarks and
reduces memory usage.
* :mod:`asyncio` has a new per-thread double linked list implementation internally for
:class:`native tasks <asyncio.Task>` which speeds up execution by 10-20% on standard
pyperformance benchmarks and reduces memory usage.
This enables external introspection tools such as
:ref:`python -m asyncio pstree <whatsnew314-asyncio-introspection>`
to introspect the call graph of asyncio tasks running in all threads.
(Contributed by Kumar Aditya in :gh:`107803`.)

* :mod:`asyncio` has first class support for :term:`free-threading builds <free threading>`.
This enables parallel execution of multiple event loops across different threads and scales
linearly with the number of threads.
(Contributed by Kumar Aditya in :gh:`128002`.)

* :mod:`asyncio` has new utility functions for introspecting and printing
the program's call graph: :func:`asyncio.capture_call_graph` and
:func:`asyncio.print_call_graph`.
Expand Down Expand Up @@ -2083,7 +2091,6 @@ Deprecated
* :class:`asyncio.WindowsProactorEventLoopPolicy`
* :func:`asyncio.get_event_loop_policy`
* :func:`asyncio.set_event_loop_policy`
* :func:`asyncio.set_event_loop`

Users should use :func:`asyncio.run` or :class:`asyncio.Runner` with
*loop_factory* to use the desired event loop implementation.
Expand Down
Loading