Fix cursor closed error, improve feed parsing, and update worker counts
This commit is contained in:
parent
ce19d301e6
commit
824ff0539d
523 changed files with 190411 additions and 355 deletions
52
scheduler.py
Normal file
52
scheduler.py
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# /home/x/rss/scheduler.py
|
||||
|
||||
import time
|
||||
import logging
|
||||
import atexit
|
||||
from datetime import datetime, timedelta
|
||||
import sys # Added this import
|
||||
|
||||
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
|
||||
|
||||
# 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')
|
||||
|
||||
# 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 ---
|
||||
def shutdown_scheduler():
|
||||
"""Función para detener el planificador de forma segura al salir."""
|
||||
if scheduler.running:
|
||||
scheduler.shutdown()
|
||||
logging.info("Scheduler del worker detenido.")
|
||||
|
||||
# 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
|
||||
# La primera ejecución será a los 10 segundos de arrancar el worker
|
||||
scheduler.add_job(
|
||||
fetch_and_store,
|
||||
"interval",
|
||||
minutes=15,
|
||||
id="rss_job",
|
||||
next_run_time=datetime.utcnow() + timedelta(seconds=10)
|
||||
)
|
||||
|
||||
# Arrancamos el planificador
|
||||
scheduler.start()
|
||||
|
||||
logging.info("Worker del Scheduler iniciado. Tarea programada cada 15 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue