Назад к вопросам
Middle
4
Как решить проблему блокировки event loop в FastAPI при использовании синхронного кода?
Компании, где спрашивали
Альфаматика
Ответ от нейросети
sobes.tech AI
В FastAPI, который построен на асинхронном event loop (обычно uvicorn + asyncio), выполнение длительных синхронных операций блокирует event loop и замедляет обработку других запросов.
Чтобы избежать блокировки event loop при использовании синхронного кода, можно:
- Вынести синхронный код в отдельный поток или процесс с помощью
run_in_executor:
import asyncio
from fastapi import FastAPI
app = FastAPI()
def blocking_io():
# Длительная синхронная операция
import time
time.sleep(5)
return "done"
@app.get("/sync")
async def read_sync():
loop = asyncio.get_running_loop()
result = await loop.run_in_executor(None, blocking_io)
return {"result": result}
-
Использовать асинхронные библиотеки вместо синхронных, если это возможно.
-
Переписать критичные части кода на асинхронный стиль.
Таким образом, run_in_executor позволяет запускать блокирующий код в отдельном потоке, не блокируя основной event loop FastAPI.