Back to questions
Middle
3
Что делать, если в асинхронном приложении (FastAPI) есть блокирующая синхронная I/O-операция?
Companies where asked
ИП Ганус Александр Андреевич
Answer from AI
sobes.tech AI
В FastAPI, который основан на asyncio, блокирующие синхронные I/O операции могут заблокировать весь event loop, что приведёт к снижению производительности и задержкам.
Чтобы решить эту проблему, можно:
- Вынести блокирующую операцию в отдельный поток или процесс с помощью
run_in_executor:
import asyncio
from fastapi import FastAPI
app = FastAPI()
def blocking_io():
# Например, чтение из файла или запрос к базе данных без async
import time
time.sleep(5)
return "done"
@app.get("/blocking")
async def read_blocking():
loop = asyncio.get_running_loop()
result = await loop.run_in_executor(None, blocking_io)
return {"result": result}
-
Использовать асинхронные библиотеки для I/O, если они доступны (например,
httpxвместоrequests,databasesвместо синхронных драйверов БД). -
Если операция очень тяжёлая, рассмотреть выделение её в отдельный микросервис или задачу в очереди.
Таким образом, блокирующая операция не будет мешать обработке других запросов.