await используется внутри async функций для приостановки выполнения функции до тех пор, пока асинхронная операция (например, корутина или задача) не завершится.  await "отпускает" цикл событий, позволяя другим корутинам выполняться, и затем возобновляет выполнение текущей корутины, когда результат асинхронной операции станет доступен.  Это позволяет избежать блокировки потока выполнения и обеспечивает конкурентное выполнение операций. await может применяться только к awaitable объектам (объектам, которые имеют метод __await__).
Ключевое слово await в Python используется в асинхронных функциях (async def) и предназначено для приостановки выполнения функции до тех пор, пока не будет получен результат выполнения другого awaitable объекта (обычно корутины).
Основная функция await:
await приостанавливает выполнение текущей асинхронной функции, давая возможность event loop (циклу событий) выполнить другие задачи.  Это ключевое отличие от блокирующих операций в синхронном коде, где поток выполнения полностью останавливается.await встречает awaitable объект, он передает управление event loop. Event loop продолжает выполнять другие готовые к выполнению корутины или задачи.await возобновляет выполнение асинхронной функции с того места, где оно было приостановлено, и получает возвращенное значение.Awaitable объекты:
await может использоваться только с awaitable объектами.  В Python 3.5 и выше, awaitable объекты включают:
async def.asyncio.create_task() или asyncio.ensure_future(), которые оборачивают корутину для параллельного выполнения.__await__(): Любой объект, реализующий метод __await__(), который должен вернуть итератор.  Это позволяет создавать собственные awaitable типы.Пример:
import asyncio
async def fetch_data(url):
    print(f"Начинаю загрузку данных с {url}")
    # Имитация асинхронного запроса (задержка)
    await asyncio.sleep(1)  # Вместо реального запроса к сети
    print(f"Данные с {url} загружены")
    return f"Данные с {url}"
async def main():
    data1 = await fetch_data("https://example.com/api/data1")
    print(f"Обработка данных 1: {data1}")
    data2 = await fetch_data("https://example.org/api/data2")
    print(f"Обработка данных 2: {data2}")
if __name__ == "__main__":
    asyncio.run(main())
    В этом примере:
fetch_data - асинхронная функция, которая "загружает" данные (на самом деле просто ждет секунду).await asyncio.sleep(1) приостанавливает fetch_data на 1 секунду, позволяя event loop выполнять другие задачи.main - еще одна асинхронная функция, которая вызывает fetch_data дважды с помощью await.asyncio.run(main()) запускает event loop и функцию main.Важно понимать: await может использоваться только внутри асинхронных функций.  Использование await вне асинхронной функции приведет к ошибке SyntaxError.
Суммируя: await - это ключевой механизм для написания асинхронного кода в Python, позволяющий выполнять операции параллельно, не блокируя основной поток выполнения, что приводит к более отзывчивым и эффективным приложениям, особенно при работе с операциями ввода-вывода (сеть, диски и т.д.).