FastAPI позволяет реализовывать функции как асинхронные и синхронные — как это влияет на поведение? Как распараллелить запросы в async функции?

FastAPI поддерживает как синхронные, так и асинхронные обработчики запросов.

Короткий ответ

Что ответить на собеседовании

FastAPI поддерживает как синхронные, так и асинхронные обработчики запросов.

Подробный разбор

Ответ с пояснениями

FastAPI поддерживает как синхронные, так и асинхронные обработчики запросов.

  • Синхронные функции выполняются в основном потоке, и если в них есть блокирующие операции (например, запросы к базе данных без async драйвера), они блокируют обработку других запросов.
  • Асинхронные функции позволяют использовать await для неблокирующих операций, что повышает производительность при большом числе одновременных запросов.

Однако, если внутри async функции вы вызываете блокирующий код без асинхронного интерфейса, это сведёт на нет преимущества асинхронности.

Для распараллеливания нескольких асинхронных задач внутри async функции можно использовать asyncio.gather(). Например:

from fastapi import FastAPI
import asyncio

app = FastAPI()

async def fetch_data(x):
    await asyncio.sleep(1)  # имитация асинхронной операции
    return x * 2

@app.get("/parallel")
async def parallel_requests():
    results = await asyncio.gather(
        fetch_data(1),
        fetch_data(2),
        fetch_data(3),
    )
    return {"results": results}

Таким образом, запросы внутри async def выполняются параллельно, что сокращает общее время ожидания.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее