Sobes.tech
Middle
46

Hoe los je het probleem van het blokkeren van de event loop in FastAPI bij het gebruik van synchronische code?

Bedrijven waar gevraagd werd
Альфаматика

Antwoord van AI

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.