"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué UploadFile de FastAPI a veces es más lento que Flask?

¿Por qué UploadFile de FastAPI a veces es más lento que Flask?

Publicado el 2024-11-09
Navegar:897

Why is FastAPI's UploadFile Sometimes Slower Than Flask?

Rendimiento de FastAPI UploadFile en comparación con Flask

El rendimiento de UploadFile en FastAPI puede ser más lento que el de Flask debido a diferencias en el manejo de datos. UploadFile de FastAPI utiliza métodos asincrónicos que pueden provocar cuellos de botella si no se manejan de manera eficiente, mientras que Flask usa métodos sincrónicos.

He aquí por qué UploadFile de FastAPI puede ser más lento:

  • Bloqueo de E/S: De forma predeterminada, los métodos UploadFile de FastAPI utilizan el bloqueo Operaciones de E/S, que pueden obstaculizar el hilo principal y ralentizar la API.
  • Fragmentación de datos: Starlette (el marco subyacente de FastAPI) utiliza un SpooledTemporaryFile con un tamaño máximo predeterminado de 1 MB. Una vez que los datos superan este tamaño, se escriben en un archivo temporal en el disco, lo que agrega otro nivel de sobrecarga de E/S.

Prácticas recomendadas para cargas de archivos eficientes en FastAPI:

Escritura de archivos asincrónica con aiofiles

Utilice la escritura de archivos asincrónica con la biblioteca aiofiles para escribir archivos sin bloqueo. Este enfoque mejora el rendimiento, especialmente para archivos grandes.

Leer el archivo en fragmentos

Considere leer el archivo en fragmentos de un tamaño específico para evitar cargar el archivo completo en la memoria. Esto evita problemas de memoria y mejora el rendimiento al cargar archivos grandes.

Uso de run_in_threadpool()

Para evitar bloquear el hilo principal, use la función run_in_threadpool() de FastAPI para realizar operaciones de bloqueo de E/S en un hilo separado. Esto garantiza la ejecución sin bloqueo de tareas relacionadas con archivos.

Acceso directo al cuerpo de la solicitud como una secuencia

En los casos en los que no sea necesario el almacenamiento de archivos en el servidor, acceda al cuerpo de la solicitud directamente como una secuencia. transmitir usando request.stream(). Este método permite un manejo eficiente de archivos sin incurrir en una sobrecarga de E/S innecesaria.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3