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

Co-authored-by: Thomas Grainger <tagrain@gmail.com>
Co-authored-by: Guido van Rossum <gvanrossum@gmail.com>
(cherry picked from commit 6281affee6)

Co-authored-by: Hendrik Makait <hendrik.makait@gmail.com>
This commit is contained in:
Miss Islington (bot) 2022-09-10 07:57:44 -07:00 committed by GitHub
parent 5a17200022
commit 9b710581a3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 7 deletions

View file

@ -262,9 +262,9 @@ Creating Tasks
.. important::
Save a reference to the result of this function, to avoid
a task disappearing mid execution. The event loop only keeps
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.
may get garbage collected at any time, even before it's done.
For reliable "fire-and-forget" background tasks, gather them in
a collection::
@ -441,7 +441,8 @@ Shielding From Cancellation
The statement::
res = await shield(something())
task = asyncio.create_task(something())
res = await shield(task)
is equivalent to::
@ -460,11 +461,19 @@ Shielding From Cancellation
the ``shield()`` function should be combined with a try/except
clause, as follows::
task = asyncio.create_task(something())
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.
.. versionchanged:: 3.10
Removed the *loop* parameter.