¿Reiniciar la aplicación Flask periódicamente para obtener los datos más recientes y actualizar varias variables de Python?
Tengo una aplicación Flask que obtiene sus datos de una base de datos Oracle usando una solicitud SQL. Esa base de datos se actualiza muy raramente, por lo que mi idea era obtener esos datos de la base de datos y realizar muchas manipulaciones de esos datos cuando se carga la aplicación. Luego, las páginas web son muy rápidas porque no tengo que hacer una solicitud SQL nuevamente, y también no tengo miedo de la inyección SQL. Sin embargo, necesito actualizar los datos aproximadamente una vez al día.
A continuación se muestra un ejemplo mínimo verificable del código que no utiliza SQL, pero que debería funcionar para demostrar el principio.
En mi código real, df proviene de la base de datos, pero creo múltiples variables a partir de eso que se pasan a la página web usando Flask. ¿Cómo puedo actualizar estos?
Intenté esto:
https://stackoverflow.com/questions/30109726/how-to-re-run-my-python-flask-application-every-night
pero el servidor nunca se actualizó, incluso cuando puse el modo de depuración = False. La razón por la que no funciona es que una vez que la aplicación Flask está en funcionamiento, es como si estuviera en su propio bucle while sirviendo la aplicación. La primera vez que presiono ctrl+c, sale del servidor de la aplicación y comienza el bucle while nuevamente, reiniciando el servidor, pero eso no ayuda.
from flask import Flask, render_template, redirect, url_for, Response
import pandas as pd
import datetime as dt
import flask
#####################################################################
#inicio de la parte que necesito actualizar
df = pd.DataFrame(range(5), columns=[‘Column1’])
df[‘Column2’] = df[‘Column1’] * 2
df[‘Column3’] = dt.datetime.now()
df[‘Column4’] = df[‘Column3’] + pd.to_timedelta(df[‘Column2’], ‘d’)
var1 = min(df[‘Column4’])
var2 = max(df[‘Column4’])
#Fin de actualización
####################################################################
app = flask.Flask(name, static_url_path=”,
static_folder=’static’,
template_folder=’template’)
app.config[“DEBUG”] = True
@app.route(“/home”)
def home():
return render_template(“home.html”,
var1=str(var1),
var2=str(var2))
if name == ‘main‘:
app.run(host=”localhost”, port=5000, debug=True)
HOME HTML
”’
</body>
”’
Me gustaría hacer un ejemplo de trabajo que se actualice cada 5 minutos como prueba de concepto.
davy.ai
Puede utilizar la biblioteca APScheduler para programar tareas en su aplicación de Flask. Puede configurar una tarea para que se ejecute cada 5 minutos y actualizar los datos en su aplicación.
Primero, instale la biblioteca:
Luego, agregue el siguiente código a su aplicación:
La función
refresh_data
debe contener el código para actualizar los datos en su aplicación.También puede agregar el siguiente código a su aplicación para asegurarse de que el programador se detenga cuando la aplicación se cierre:
Esto debería permitirle actualizar los datos en su aplicación cada 5 minutos.