From 2bf9185fe44f5231710a1b8a4ae02af7136e31d7 Mon Sep 17 00:00:00 2001 From: John Belmonte Date: Sun, 26 Apr 2026 15:56:28 -0700 Subject: [PATCH 1/2] gh-108951: Whatsnew and doc tweaks for TaskGroup.cancel() --- Doc/library/asyncio-task.rst | 4 ++-- Doc/whatsnew/3.15.rst | 7 +++++++ .../Library/2024-11-24-07-18-40.gh-issue-108951.jyKygP.rst | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst index f0fe91b363d95e..2e17d0dc70c7a5 100644 --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -394,8 +394,8 @@ Example:: The ``async with`` statement will wait for all tasks in the group to finish. While waiting, new tasks may still be added to the group (for example, by passing ``tg`` into one of the coroutines -and calling ``tg.create_task()`` in that coroutine). There is also opportunity -to short-circuit the entire task group with ``tg.cancel()``, based on some condition. +and calling ``tg.create_task()`` in that coroutine). There is also opportunity to +request termination of the entire task group with ``tg.cancel()``, based on some condition. Once the last task has finished and the ``async with`` block is exited, no new tasks may be added to the group. diff --git a/Doc/whatsnew/3.15.rst b/Doc/whatsnew/3.15.rst index 405d388af487e8..c7f1918ae1ad32 100644 --- a/Doc/whatsnew/3.15.rst +++ b/Doc/whatsnew/3.15.rst @@ -717,6 +717,13 @@ ast This can be :ref:`controlled using environment variables `. (Contributed by Stan Ulbrych in :gh:`148981`.) +asyncio +------- +* Added :meth:`~asyncio.TaskGroup.cancel` to allow early termination of a task group -- + e.g. when the goal of the tasks has been achieved or their services no longer needed. + Previously this would involve unintuitive boilerplate such as an extra task raising + a custom exception which is then suppressed as it exits TaskGroup. + (Contributed by John Belmonte in :gh:`127214`.) base64 ------ diff --git a/Misc/NEWS.d/next/Library/2024-11-24-07-18-40.gh-issue-108951.jyKygP.rst b/Misc/NEWS.d/next/Library/2024-11-24-07-18-40.gh-issue-108951.jyKygP.rst index 1696a2dd1728ed..bad8ab66e24c2f 100644 --- a/Misc/NEWS.d/next/Library/2024-11-24-07-18-40.gh-issue-108951.jyKygP.rst +++ b/Misc/NEWS.d/next/Library/2024-11-24-07-18-40.gh-issue-108951.jyKygP.rst @@ -1 +1 @@ -Add :meth:`~asyncio.TaskGroup.cancel` which cancels unfinished tasks and exits the group without error. +Add :meth:`~asyncio.TaskGroup.cancel` which cancels unfinished tasks and exits the group without raising :exc:`asyncio.CancelledError`. From e6a42b92af065cc9e07a09ae9aee49500014990c Mon Sep 17 00:00:00 2001 From: John Belmonte Date: Sun, 26 Apr 2026 17:21:24 -0700 Subject: [PATCH 2/2] formatting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Alex Grönholm --- Doc/whatsnew/3.15.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/Doc/whatsnew/3.15.rst b/Doc/whatsnew/3.15.rst index c7f1918ae1ad32..af02b2bb258df0 100644 --- a/Doc/whatsnew/3.15.rst +++ b/Doc/whatsnew/3.15.rst @@ -719,6 +719,7 @@ ast asyncio ------- + * Added :meth:`~asyncio.TaskGroup.cancel` to allow early termination of a task group -- e.g. when the goal of the tasks has been achieved or their services no longer needed. Previously this would involve unintuitive boilerplate such as an extra task raising