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