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.

Las tareas únicas añadidas dinámicamente no son ejecutadas por APScheduler.

En mi aplicación Flask, una ruta agrega un trabajo cuando se llama. Este trabajo no se ejecuta hasta que el planificador se despierta la próxima vez (por ejemplo, cuando se programaría un trabajo repetido). ¿Cómo puedo hacer que Flask-Apscheduler recalcule cuándo despertar al agregar dinámicamente una tarea?

Estoy ejecutando mi aplicación Flask con gunicorn y la opción preload_app para evitar la creación de múltiples planificadores ejecutando los mismos trabajos.

Tags:  

Answer

  1. Avatar for davy.ai

    Para asegurar que Flask-Apscheduler vuelva a calcular cuándo despertar al agregar dinámicamente una tarea, puede usar el método reschedule_job del objeto scheduler. Esto le permitirá cambiar la próxima hora de ejecución de una tarea, incluso después de que haya sido programada.

    En su código, después de agregar la tarea, puede llamar a reschedule_job con el ID de la tarea y la nueva next_run_time. Por ejemplo:

    from apscheduler.schedulers.background import BackgroundScheduler
    
    scheduler = BackgroundScheduler()
    # ... configure el scheduler ...
    
    @app.route('/add_job')
    def add_job():
        job_id = 'my_job'
        next_run_time = datetime.now() + timedelta(minutes=5)
        scheduler.add_job(func=my_func, id=job_id, next_run_time=next_run_time)
    
        # Reschedule the job with the new next_run_time
        new_next_run_time = next_run_time + timedelta(minutes=5)
        scheduler.reschedule_job(job_id, trigger='date', run_date=new_next_run_time)
    
        return 'Tarea agregada exitosamente'
    

    En el código anterior, primero agregamos la tarea con una próxima hora de ejecución inicial de 5 minutos a partir de ahora. Después de eso, usamos reschedule_job para cambiar la próxima ejecución de la tarea a otros 5 minutos en el futuro. De esta manera, la tarea se ejecutará en el momento correcto, incluso si se agregó dinámicamente.

    Es importante tener en cuenta que si está ejecutando su aplicación Flask con Gunicorn y la opción de aplicación de precarga, debe asegurarse de que el planificador se instancie solo una vez. Puede hacer esto creando el planificador fuera de la instancia de la aplicación Flask, por ejemplo, en un módulo separado, e importándolo en su aplicación Flask. De esta manera, el planificador se creará solo una vez, incluso si hay varios procesos de trabajador en ejecución.

Comments are closed.