Python Glossary English

Python 3.5+Асинхронное программированиепонятие

async def / await

корутины

async def объявляет корутину. await приостанавливает выполнение до результата другой корутины.

Синтаксис

async def name() -> T:
    result = await other_coroutine()

Вызов greet('Alice') без await ничего не выполняет — он возвращает объект-корутину, а при завершении программы вы получите предупреждение "coroutine was never awaited". Само по себе await доступно только внутри async def, а верхний уровень программы запускается через asyncio.run(main()). И асинхронность здесь не про параллельность: цикл событий один и однопоточный, поэтому обычный блокирующий вызов вроде time.sleep() или синхронного requests замораживает сразу все задачи.

Примеры

import asyncio
async def greet(name):
    await asyncio.sleep(0)
    return f'hello, {name}'
async def main():
    msg = await greet('Alice')
    print(msg)  # → hello, Alice
asyncio.run(main())
# Корутина без await не выполняется: вызов лишь создаёт объект
async def f():
    return 1
coro = f()
print(type(coro).__name__)  # → coroutine
coro.close()  # иначе RuntimeWarning: coroutine was never awaited

См. также

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