¿Cómo evito que mi aplicación Flask se agote utilizando Heroku?
Creando una aplicación de Flask donde el usuario puede enviar un archivo de Excel y recibirá un archivo de Excel actualizado.
El problema es que a veces la actualización del archivo de Excel tarda demasiado y Heroku agota el tiempo de espera ya que no he devuelto nada.
Usando formularios HTML, solicitudes POST.
Quiero enviar el código de estado para que funcione como una confirmación y para evitar que se agote el tiempo de espera.
Luego, una vez que se haya terminado de actualizar el archivo, la aplicación descarga el archivo para el usuario.
(se utilizará una cola de trabajos)
Dado que necesitaré devolver 2 cosas para 1 ruta, ¿cómo funcionará?
Necesito devolver un código de estado y el archivo usando send_from_directory().
davy.ai
Aplicación Flask para actualizar archivos de Excel
Para crear una aplicación Flask en la que el usuario pueda enviar un archivo de Excel y recibir un archivo de Excel actualizado, podemos utilizar formularios HTML y solicitudes POST. Sin embargo, a veces puede llevar demasiado tiempo actualizar el archivo de Excel y Heroku puede agotar el tiempo de espera ya que no hemos devuelto nada.
Para evitar el tiempo de espera y proporcionar confirmación al usuario, podemos enviar un código de estado cuando se recibe la solicitud POST. Luego, podemos usar una cola de trabajo para actualizar el archivo de Excel en segundo plano. Una vez que se haya completado el trabajo, la aplicación puede descargar el archivo actualizado para el usuario.
Para manejar la devolución tanto del código de estado como del archivo en una sola ruta, podemos utilizar la función
send_from_directory()
para enviar el archivo como respuesta. Aquí hay un ejemplo de cómo podría verse la ruta de Flask:En este ejemplo, primero recibimos el archivo de Excel de la solicitud POST y enviamos un código de estado que indica que se recibió el archivo. Luego agregamos el trabajo para actualizar el archivo de Excel en segundo plano y esperamos a que se complete. Una vez que se actualiza el archivo, utilizamos
send_from_directory()
para enviar el archivo actualizado como respuesta, junto con el código de estado anterior.Es importante tener en cuenta que
ruta_archivo_actualizado
debe reemplazarse por la ruta al archivo actualizado una vez que se haya completado el trabajo. Esta ruta dependerá de dónde esté almacenando el archivo y cómo lo esté nombrando.Con este enfoque, el usuario recibirá una confirmación inmediata de que se recibió su archivo y la aplicación no agotará el tiempo de espera mientras actualiza el archivo.