mirror of https://github.com/python/cpython
gh-88831: In docs for asyncio.create_task, explain why strong references to tasks are needed (GH-93258)
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
This commit is contained in:
parent
f0d0be3493
commit
75ceae05c1
|
@ -226,7 +226,24 @@ Creating Tasks
|
||||||
.. important::
|
.. important::
|
||||||
|
|
||||||
Save a reference to the result of this function, to avoid
|
Save a reference to the result of this function, to avoid
|
||||||
a task disappearing mid execution.
|
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::
|
||||||
|
|
||||||
|
background_tasks = set()
|
||||||
|
|
||||||
|
for i in range(10):
|
||||||
|
task = asyncio.create_task(some_coro(param=i))
|
||||||
|
|
||||||
|
# Add task to the set. This creates a strong reference.
|
||||||
|
background_tasks.add(task)
|
||||||
|
|
||||||
|
# To prevent keeping references to finished tasks forever,
|
||||||
|
# make each task remove its own reference from the set after
|
||||||
|
# completion:
|
||||||
|
task.add_done_callback(background_tasks.discard)
|
||||||
|
|
||||||
.. versionadded:: 3.7
|
.. versionadded:: 3.7
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Augmented documentation of asyncio.create_task(). Clarified the need to keep strong references to tasks and added a code snippet detailing how to to this.
|
Loading…
Reference in New Issue