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

gh-141186: Document asyncio Task cancellation propagation behavior#141249

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged

Conversation

@mohsinm-dev
Copy link
Contributor

@mohsinm-devmohsinm-dev commentedNov 8, 2025
edited by github-actionsbot
Loading

Fixes issue#141186 by documenting that cancelling a Task cancels what it's waiting for.

Problem

The docs said cancelling a coroutine waiting on a Future cancels the Future, but didn't mention this also happens with Tasks. Users didn't know Tasks work the same way.

Solution

  • Added "or Task" to the documentation where it only mentioned Future
  • Explained that cancellation goes down the whole chain of waiting tasks
  • Mentioned that Tasks inherit from Future so they work the same

Testing

Ran the exact code from the issue - it works as expected. Tested multiple scenarios to confirm the behavior.

Documentation-only change. No code was modified.


📚 Documentation preview 📚:https://cpython-previews--141249.org.readthedocs.build/

discouraged. Should the coroutine nevertheless decide to suppress
the cancellation, it needs to call:meth:`Task.uncancel` in addition
to catching the exception.

Copy link
Member

@StanFromIrelandStanFromIrelandNov 8, 2025
edited
Loading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

You have trailing whitespace here.

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Just removed it.

@mohsinm-devmohsinm-devforce-pushed thefix-gh-141186-asyncio-only branch from743e34a tof4bb1e8CompareNovember 8, 2025 14:45
will cause the Task to throw a:exc:`CancelledError` exception into
the wrapped coroutine. If a coroutine is awaiting on a Future
object during cancellation, theFuture object will be cancelled.
or Taskobject during cancellation, theawaited object will be cancelled.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

It actually supports any future-like objects, you can say it like "if coroutine is awaiting on future-like object then that will be cancelled", with sphinx markers as necessary

the cancellation, it needs to call:meth:`Task.uncancel` in addition
to catching the exception.

If the Task being cancelled is currently awaiting another Task or
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Same

@mohsinm-devmohsinm-devforce-pushed thefix-gh-141186-asyncio-only branch fromf4bb1e8 to2811031CompareNovember 8, 2025 15:24
:class:`asyncio.Task` inherits from:class:`Future` all of its
APIs except:meth:`Future.set_result` and
:meth:`Future.set_exception`.
:meth:`Future.set_exception`. This includes the cancellation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

This is redundant, the exceptions are already noted rest are same by default

the cancellation, it needs to call:meth:`Task.uncancel` in addition
to catching the exception.

If the Task being cancelled is currently awaiting a future-like
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Suggested change
If the Task being cancelled is currently awaiting a future-like
If the Task being cancelled is currently awaitingona future-like

Clarifies that cancelling a Task awaiting another Task or Future willalso cancel the awaited object. This behavior was undocumented despitebeing fundamental to asyncio's cancellation architecture.Changes:- Updated general Task description to mention Task cancellation propagation- Added explicit explanation in Task.cancel() method documentation- Clarified that Tasks inherit Future's cancellation behaviorAddresses issuepython#141186 where users were unaware this cancellationpropagation was intentional architectural behavior, not a side effect.The fix uses the exact wording suggested by the issue reporter anddocuments the _fut_waiter implementation behavior that enables thepropagation down entire await chains.
@kumaraditya303kumaraditya303 merged commitb36f01d intopython:mainNov 9, 2025
32 checks passed
@github-project-automationgithub-project-automationbot moved this fromTodo toDone inDocs PRsNov 9, 2025
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@kumaraditya303kumaraditya303kumaraditya303 approved these changes

@1st11st1Awaiting requested review from 1st11st1 is a code owner

@asvetlovasvetlovAwaiting requested review from asvetlovasvetlov is a code owner

@willingcwillingcAwaiting requested review from willingcwillingc is a code owner

@StanFromIrelandStanFromIrelandAwaiting requested review from StanFromIreland

Assignees

No one assigned

Labels

docsDocumentation in the Doc dirskip news

Projects

Status: Done

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

3 participants

@mohsinm-dev@kumaraditya303@StanFromIreland

[8]ページ先頭

©2009-2025 Movatter.jp