Вопрос проверяет понимание асинхронной модели выполнения и реальных выгод от async/await.
Если endpoint объявлен async, но внутри используются синхронные операции, сервер блокирует event loop. В результате приложение теряет преимущества асинхронности и плохо масштабируется. При высокой нагрузке такие эндпоинты начинают резко деградировать по времени ответа. Это частая ошибка при работе с БД или внешними сервисами.
Асинхронный endpoint — это обработчик запроса, который должен освобождать event loop во время ожидания ввода-вывода.
Асинхронность работает только при одном условии — все длительные операции должны быть неблокирующими.
Блокировка event loop
синхронный запрос к БД
синхронный HTTP-вызов
тяжёлые вычисления
Потеря масштабируемости
запросы начинают выполняться последовательно
количество одновременных клиентов резко ограничивается
Ложное ощущение асинхронности
код выглядит современно
но работает как обычный sync
@app.get("/users")
async def get_users():
users = sync_db_query() # блокирует event loop
return users
В этом случае:
async не даёт преимуществ
приложение ведёт себя как синхронное
использовать async-драйверы
выносить sync-код в thread pool
делать endpoint синхронным, если async не нужен
async имеет смысл только тогда, когда вся цепочка операций поддерживает асинхронное выполнение.