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