«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему UploadFile FastAPI иногда медленнее, чем Flask?

Почему UploadFile FastAPI иногда медленнее, чем Flask?

Опубликовано 9 ноября 2024 г.
Просматривать:292

Why is FastAPI's UploadFile Sometimes Slower Than Flask?

Производительность UploadFile FastAPI по сравнению с Flask

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

Вот почему UploadFile FastAPI может работать медленнее:

  • Блокировка ввода-вывода: По умолчанию методы FastAPI UploadFile используют блокировку операций ввода-вывода, что может затруднить основной поток и замедлить работу API.
  • Разбивка данных: Starlette (базовая платформа для FastAPI) использует SpooledTemporaryFile с max_size по умолчанию, равным 1 МБ. Как только данные превышают этот размер, они записываются во временный файл на диске, что добавляет еще один уровень накладных расходов на ввод-вывод.

Рекомендации по эффективной загрузке файлов в FastAPI:

Асинхронная запись файлов с помощью aiofiles

Используйте асинхронную запись файлов с библиотекой aiofiles для записи файлов неблокирующим способом. Такой подход повышает производительность, особенно для больших файлов.

Чтение файла частями

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

Использование run_in_threadpool()

Чтобы избежать блокировки основного потока, используйте функцию run_in_threadpool() FastAPI для выполнения блокирующих операций ввода-вывода в отдельная ветка. Это обеспечивает неблокирующее выполнение задач, связанных с файлами.

Прямой доступ к телу запроса как к потоку

В случаях, когда хранение файлов на сервере не требуется, обращайтесь к телу запроса напрямую как к поток с использованием request.stream(). Этот метод позволяет эффективно обрабатывать файлы без ненужных затрат на ввод-вывод.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3