Python 3.7+Асинхронное программированиефункция
asyncio.create_task()
задачи
Оборачивает корутину в Task и планирует её в event loop: задача начнёт работу при ближайшем await текущей корутины, ждать её результата сразу не нужно.
Синтаксис
task = asyncio.create_task(coro())
Корутина не стартует прямо в точке вызова: задача лишь ставится в очередь event loop и начинает выполняться, когда текущая корутина сама дойдёт до ближайшего await. Вторая ловушка — ссылка: loop держит на задачу только слабую ссылку, поэтому task, никуда не сохранённый, может быть собран сборщиком мусора посреди работы; храните его в переменной или во множестве до завершения. И исключение внутри задачи молчит, пока её не дождались через await — потерянные задачи легко прячут ошибки.
Примеры
import asyncio
async def bg():
await asyncio.sleep(0)
return 'done'
async def main():
t = asyncio.create_task(bg())
print('working...') # → working... — задача запланирована, но ещё не начала выполняться
result = await t
print(result) # → done
asyncio.run(main())
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности