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Сообщить о неточности