Sobes.tech
Назад к вопросам
Middle
4

Как решить проблему блокировки event loop в FastAPI при использовании синхронного кода?

Компании, где спрашивали
Альфаматика

Ответ от нейросети

sobes.tech AI

В FastAPI, который построен на асинхронном event loop (обычно uvicorn + asyncio), выполнение длительных синхронных операций блокирует event loop и замедляет обработку других запросов.

Чтобы избежать блокировки event loop при использовании синхронного кода, можно:

  1. Вынести синхронный код в отдельный поток или процесс с помощью 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}
  1. Использовать асинхронные библиотеки вместо синхронных, если это возможно.

  2. Переписать критичные части кода на асинхронный стиль.

Таким образом, run_in_executor позволяет запускать блокирующий код в отдельном потоке, не блокируя основной event loop FastAPI.