Python Glossary English

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