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.
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 objetoscheduler
. 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 nuevanext_run_time
. Por ejemplo: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.