es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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

”’

Este es Var1: {{var1}}
Este es Var2: {{var2}}
</body>


”’

Me gustaría hacer un ejemplo de trabajo que se actualice cada 5 minutos como prueba de concepto.

Tags:  ,

Answer

  1. Avatar for 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:

    pip install apscheduler
    

    Luego, agregue el siguiente código a su aplicación:

    from apscheduler.schedulers.background import BackgroundScheduler
    
    scheduler = BackgroundScheduler()
    scheduler.add_job(func=refresh_data, trigger="interval", minutes=5)
    scheduler.start()
    

    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:

    @app.before_first_request
    def initialize():
        # Iniciar el programador
        scheduler.start()
    
    @app.teardown_appcontext
    def shutdown_scheduler(exception=None):
        # Detener el programador al salir de la aplicación
        scheduler.shutdown()
    

    Esto debería permitirle actualizar los datos en su aplicación cada 5 minutos.

Comments are closed.