Check

Асинхронные веб-фреймворки и блокирующий код

Python Senior Яндекс
Что произойдёт, если внутри обработчика FastAPI/Starlette, объявленного как `async def`, вызвать тяжёлую синхронную функцию (CPU-bound или блокирующий I/O)? Как это правильно исправить?
Ответы
Блокирующий код в async handler
Если внутри `async` обработчика вызвать блокирующую функцию, event loop будет заблокирован на время её выполнения. Это приведёт к задержкам для всех запросов, обслуживаемых этим воркером. Исправление: - вынести CPU-bound в отдельный процесс (`ProcessPoolExecutor`, Celery и т.п.); - блокирующий I/O запускать через `run_in_executor`: ```python import asyncio async def handler(): loop = asyncio.get_running_loop() result = await loop.run_in_executor(None, blocking_func) return result ```