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.

APSchedulers necesita ser redefinido en el inicio.

Estoy utilizando apscheduler en jupyter notebook para programar trabajos cron y estoy utilizando el almacenamiento de trabajos sqlalchemy.

Cada vez que abro la aplicación tengo que redefinir las variables y como no hay un archivo de almacenamiento de trabajos físico, los trabajos se reinician.

Entonces mi pregunta es: ¿cómo puedo obtener jobs.sqlite como un archivo físico?
¿Y cuál es la técnica adecuada para definir un programador apscheduler para que no tenga que ser redefinido cada vez?

import sqlalchemy
import pymongo
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.mongodb import MongoDBJobStore
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
from apscheduler.triggers.cron import CronTrigger
import logging

logging.basicConfig()
logging.getLogger(‘apscheduler’).setLevel(logging.DEBUG)

jobstores = {
‘default’: SQLAlchemyJobStore(url=’sqlite:///jobs.sqlite’),
‘mongo’: MongoDBJobStore()
}

executors = {
‘default’: ThreadPoolExecutor(20),
‘processpool’: ProcessPoolExecutor(5)
}

job_defaults = {
‘coalesce’: False,
‘max_instances’: 100
}

scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=”Asia/Karachi”)
scheduler.configure({‘apscheduler.daemon’: False})

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el SQLAlchemyJobStore para almacenar los trabajos en un archivo físico. Para hacer esto, debe especificar el parámetro url al crear la tienda de trabajos. Por ejemplo:

    jobstores = {
        'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite'),
        'mongo': MongoDBJobStore()
    }
    

    Esto creará un archivo jobs.sqlite en el directorio de trabajo actual.

    Para asegurarse de que el planificador no se reinicie cada vez que se abra la aplicación, debe iniciar el planificador en segundo plano. Para hacer esto, puede utilizar la clase BackgroundScheduler. Por ejemplo:

    scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone="Asia/Karachi")
    scheduler.configure({'apscheduler.daemon': False})
    scheduler.start()
    

    Esto iniciará el planificador en segundo plano y no se reiniciará cuando se abra la aplicación.

Comments are closed.