8000 gh-94972: document that shield users need to keep a reference to their task by hendrikmakait · Pull Request #96724 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

gh-94972: document that shield users need to keep a reference to their task #96724

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 7 commits into from
Sep 10, 2022
Merged
Changes from 1 commit
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
Next Next commit
gh-94972: document that shield users need to keep a reference to thei…
…r task
  • Loading branch information
graingert committed Jul 18, 2022
commit c0f34a6bd4784d54b1e9e5f9f68f6b60f42d9dfb
19 changes: 17 additions & 2 deletions Doc/library/asyncio-task.rst
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,10 @@ Shielding From Cancellation

The statement::

res = await shield(something())
task = asyncio.create_task(something())
background_tasks.add(task)
task.add_done_callback(background_tasks.discard)
res = await shield(task)

is equivalent to::

Expand All @@ -539,11 +542,23 @@ Shielding From Cancellation
the ``shield()`` function should be combined with a try/except
clause, as follows::

task = asyncio.create_task(something())
background_tasks.add(task)
task.add_done_callback(background_tasks.discard)
try:
res = await shield(something())
res = await shield(task)
except CancelledError:
res = None

.. important::

Save a reference to tasks passed to this function, to avoid
a task disappearing mid execution. The event loop only keeps
weak references to tasks. A task that isn't referenced elsewhere
may get garbage-collected at any time, even before it's done.
For reliable "fire-and-forget" background tasks, gather them in
a collection.

.. versionchanged:: 3.10
Removed the *loop* parameter.

Expand Down
0