Оптимизация FastAPI для возврата больших данных JSON
Возврат огромных наборов данных JSON через FastAPI может оказаться трудоемкой задачей. Чтобы устранить это узкое место, мы исследуем альтернативные подходы, повышающие производительность.
Выявление узкого места:
Первоначальный подход к синтаксическому анализу файла Parquet в JSON с использованием json.dumps( ) и json.loads() неэффективны. Кодировщик JSON FastAPI по умолчанию приводит к значительным накладным расходам.
Альтернативные кодировщики:
Одним из решений является использование более быстрых кодировщиков JSON, таких как orjson или ujson. Эти альтернативы существенно улучшают кодировщик FastAPI по умолчанию.
Настройка кодировки ответа:
Обходя кодировщик FastAPI по умолчанию и напрямую преобразуя данные в JSON в ответе, мы может оптимизировать процесс кодирования. Это влечет за собой создание специального класса APIRoute, который переопределяет обработчик маршрута и измеряет время ответа.
Использование кодировщика Pandas JSON:
Использование метода Pandas to_json() непосредственно внутри FastAPI обеспечивает отличную производительность. Этот метод преобразует DataFrame в строку JSON, избегая ненужных преобразований и повышая эффективность.
Потоковая передача данных, если возникают проблемы с памятью:
В случаях, когда ограничения памяти возникают из-за чрезмерного количества памяти. данных, рассмотрите методы потоковой передачи. Поэтапный возврат данных может эффективно уменьшить проблемы с памятью.
Альтернативное решение: Dask
Для исключительно больших наборов данных рассмотрите возможность использования Dask, специализированной библиотеки, предназначенной для обработки таких объемов. Метод read_parquet() Dask обеспечивает плавную интеграцию с файлами Parquet.
Дополнительные соображения:
Если отображение данных в браузере вызывает задержки, установите заголовок Content-Disposition с параметром Attachment предлагает браузеру загрузить данные вместо их отображения. Кроме того, указание параметра пути при использовании методов to_json() или to_csv() в Pandas предотвращает потенциальные проблемы с памятью, избегая хранения большого набора данных в памяти.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3