diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst index 8e3d49dcf9d717..7796e47d4674dc 100644 --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -226,7 +226,24 @@ Creating Tasks .. important:: 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 diff --git a/Misc/NEWS.d/next/Documentation/2022-05-26-14-51-25.gh-issue-88831.5Cccr5.rst b/Misc/NEWS.d/next/Documentation/2022-05-26-14-51-25.gh-issue-88831.5Cccr5.rst new file mode 100644 index 00000000000000..983bea981a9b20 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2022-05-26-14-51-25.gh-issue-88831.5Cccr5.rst @@ -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.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: