[New-bugs-announce] [issue44665] asyncio.create_task() documentation should mention user needs to keep reference to the task

Vincent Bernat report at bugs.python.org
Sun Jul 18 02:01:26 EDT 2021


New submission from Vincent Bernat <python at vincent.bernat.ch>:

asyncio will only keep weak references to alive tasks (in `_all_tasks`). If a user does not keep a reference to a task and the task is not currently executing or sleeping, the user may get "Task was destroyed but it is pending!".

I would suggest adding the following paragraph to `create_task()` documentation:

Python only keeps weak references to the scheduled tasks. To avoid the task being destroyed by the garbage collector while still pending, a reference to it should be kept until the task is done.

And maybe an example in case a user wants something "fire and forget"?

```python
running_tasks = set()
# [...]
task = asyncio.create_task(some_background_function())
running_tasks.add(task)
task.add_done_callback(lambda t: running_tasks.remove(t))
```

The same applies to ensure_future as it now uses create_task, so maybe a "See create_task()".

----------
assignee: docs at python
components: Documentation
messages: 397741
nosy: bernat, docs at python
priority: normal
severity: normal
status: open
title: asyncio.create_task() documentation should mention user needs to keep reference to the task
type: enhancement
versions: Python 3.10, Python 3.11, Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue44665>
_______________________________________


More information about the New-bugs-announce mailing list