Какова идеальная инфраструктура производственного уровня для развертывания службы Python FastAPI для вычисления альтернаPython

Программы на Python
Ответить
Anonymous
 Какова идеальная инфраструктура производственного уровня для развертывания службы Python FastAPI для вычисления альтерна

Сообщение Anonymous »

Я создаю сервис Python для вычисления греческих значений с помощью Python, но я никогда не работал с Python, и я был бы признателен за советы опытных разработчиков Python, поскольку они мне очень помогут.
ПРОХОД

Позже сервис будет интегрирован с существующим бэкэндом Spring Boot.

В настоящее время я загружаю файл Excel/CSV (до 700 тыс. строк) из пользовательского интерфейса, который содержит данные опций, для которых мне нужно вычислить греки.
Я использую:
  • FastAPI → сервер асинхронного API (для потоковой передачи ответа)
  • Pandas → манипулирование данными, чтение Excel/CSV
  • NumPy → векторизованная математика
  • SciPy → вычисления Блэка-Шоулза и Грека
  • orjson → быстрая сериализация JSON
  • ProcessPoolExecutor → для параллельной обработки на основе блоков
Чтение файла (основной процесс) – pandas для CSV (движок C), openpyxl для Excel
Разделение на фрагменты – около 20 000 строк на фрагмент
Параллельные вычисления (ProcessPoolExecutor)
Векторизованные вычисления Блэка-Шоулза с использованием NumPy
Проверка ошибок (NaN, отрицательные значения, несовпадения типов)
Преобразуйте результаты в диктовку и вычислите агрегаты
Объедините результаты — объедините все выходные данные фрагментов и итоговые значения
Сериализация и потоковая передача — используйте orjson и StreamingResponse
Ниже приведена моя диаграмма производительности, время ответа для 700 тысяч записей в Excel сейчас составляет 9–11 секунд

Код: Выделить всё

### 700k Rows

| Configuration        | Read File | Calculate | Build Results | JSON | Total  |
|---------------------|-----------|-----------|---------------|------|--------|
| **Single Process**  | 1-2s      | 5-6s      | 8-10s        | 3-4s | 17-22s |
| **4 Workers**       | 1-2s      | 3-4s*     | 3-4s*        | 3-4s | 10-14s |
| **8 Workers**       | 1-2s      | 2-3s*     | 2-3s*        | 3-4s | 8-12s  |

*Parallel processing time (multiple chunks at once)

### 60k Rows

| Configuration        | Total Time | Notes                              |
|---------------------|------------|------------------------------------|
| **Single Process**  | 2-3s       | No overhead, pure speed            |
| **4 Workers**       | 3-4s       | ⚠️ Overhead > benefit             |
| **8 Workers**       | 4-5s       | ⚠️ Too much overhead
Вопросы (извините, если это звучит глупо, но я хочу создавать производственные приложения и изучать лучшие практики)
Идеально ли использовать рабочие процессы в этом API, поскольку они занимают приличный объем памяти и могут повлиять на сервер, используют ли люди его в производстве и что следует учитывать?
Является ли мой технический стек (FastAPI + Pandas + NumPy + SciPy) + orjson) подходит для этого типа рабочей нагрузки, или мне следует рассмотреть что-то другое (например, Polars, Cython или PyPy)?
Помимо накладных расходов на сериализацию JSON, есть ли другие узкие места, о которых мне следует знать (например, межпроцессное взаимодействие, GIL или блокировка ввода-вывода)?
Буду признателен за любую помощь

Подробнее здесь: https://stackoverflow.com/questions/798 ... astapi-ser
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»