Actualización del 2025-08-04 a las 21:10:33

This commit is contained in:
jlimolina 2025-08-04 21:10:33 +00:00
parent 51d61991fc
commit b44096b07c
3 changed files with 28 additions and 27 deletions

View file

@ -4,11 +4,12 @@ import time
import logging
import atexit
from datetime import datetime, timedelta
import sys # Added this import
import sys
from apscheduler.schedulers.background import BackgroundScheduler
# Importamos la app (para el contexto) y la función de captura desde nuestro fichero principal
from app import app, fetch_and_store
# --- CORRECCIÓN 1: Se cambió 'fetch_and_store' por 'fetch_and_store_all' ---
from app import app, fetch_and_store_all
# Es importante configurar el logging también para este proceso
logging.basicConfig(stream=sys.stdout, level=logging.INFO, format='[%(asctime)s] %(levelname)s in %(module)s: %(message)s')
@ -16,7 +17,7 @@ logging.basicConfig(stream=sys.stdout, level=logging.INFO, format='[%(asctime)s]
# Creamos el planificador con la zona horaria UTC para evitar ambigüedades
scheduler = BackgroundScheduler(daemon=True, timezone="UTC")
# --- INICIO DE LA MEJORA: Apagado robusto con atexit ---
# --- Apagado robusto con atexit ---
def shutdown_scheduler():
"""Función para detener el planificador de forma segura al salir."""
if scheduler.running:
@ -25,15 +26,15 @@ def shutdown_scheduler():
# Registramos la función de apagado para que se ejecute al terminar el proceso
atexit.register(shutdown_scheduler)
# --- FIN DE LA MEJORA ---
if __name__ == '__main__':
# Usamos el contexto de la aplicación para asegurar que la tarea tiene acceso a todo lo necesario
with app.app_context():
# Añadimos la tarea para que se ejecute cada 15 minutos
# Añadimos la tarea para que se ejecute cada 3 minutos
# La primera ejecución será a los 10 segundos de arrancar el worker
scheduler.add_job(
fetch_and_store,
# --- CORRECCIÓN 2: Se cambió 'fetch_and_store' por 'fetch_and_store_all' ---
fetch_and_store_all,
"interval",
minutes=3,
id="rss_job",
@ -43,10 +44,15 @@ if __name__ == '__main__':
# Arrancamos el planificador
scheduler.start()
logging.info("Worker del Scheduler iniciado. Tarea programada cada 15 minutos.")
logging.info("Worker del Scheduler iniciado. Tarea programada cada 3 minutos.")
logging.info("El proceso se mantendrá en ejecución para permitir que se ejecuten las tareas.")
# Este bucle infinito simplemente mantiene vivo el script del worker.
# El apagado ahora es manejado por atexit.
while True:
time.sleep(60)
try:
while True:
time.sleep(60)
except (KeyboardInterrupt, SystemExit):
logging.info("Apagando el worker...")