Python Glossary English

Python 3.4+Асинхронное программированиефункция

asyncio.ensure_future()

задачи

Превращает awaitable в Future: корутину оборачивает в задачу, а Future или Task возвращает как есть.

Синтаксис

fut = asyncio.ensure_future(obj, *, loop=None)

Для своего кода документация советует create_task: тот принимает только корутины и честно говорит, что создаёт задачу. ensure_future нужна в библиотеках, которые получают «что-то ожидаемое» и хотят единый Future. Ловушка — вызов вне работающего цикла: в 3.12–3.13 он даёт DeprecationWarning и берёт цикл неявно, а с 3.14 бросает RuntimeError. Как и любую задачу, результат надо хранить, иначе её соберёт сборщик мусора.

Примеры

import asyncio
async def job():
    return 5
async def main():
    fut = asyncio.get_running_loop().create_future()
    print(asyncio.ensure_future(fut) is fut)  # → True — Future не трогается
    task = asyncio.ensure_future(job())
    print(type(task).__name__, await task)  # → Task 5
    fut.cancel()
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности