Sobes.tech
Back to questions
Middle
4

Как вызов синхронной ручки повлияет на поведение всего FastAPI сервера?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

FastAPI построен на асинхронном фреймворке, который позволяет обрабатывать множество запросов одновременно благодаря async/await.

Если в FastAPI вызвать синхронную (blocking) функцию в обработчике запроса, то этот вызов заблокирует текущий поток выполнения, что приведёт к снижению производительности и уменьшению количества одновременно обрабатываемых запросов.

Например, если сервер использует один рабочий процесс (worker), то во время выполнения синхронной функции другие запросы будут ждать, пока она завершится.

Чтобы избежать этого, рекомендуется:

  • Использовать асинхронные функции и библиотеки
  • Если необходимо вызвать синхронный код, выполнять его в отдельном потоке с помощью run_in_executor

Пример вызова синхронной функции в FastAPI с использованием run_in_executor:

import asyncio
from fastapi import FastAPI
import time

app = FastAPI()

def blocking_io():
    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}

Таким образом, вызов синхронной функции напрямую в обработчике FastAPI может негативно повлиять на производительность сервера.