重新启动Wsgi服务器时,在ApScheduler Python中重新启动作业

时间:2018-01-01 04:22:34

标签: python flask cron mod-wsgi apscheduler

我正在使用python Apscheduler来安排我的工作。我的所有作业都存储为cron作业并使用BackgroundScheduler。我有以下代码:

def letschedule():
    jobstores = {
        'default': SQLAlchemyJobStore(url=app_jobs_store)
    }
    executors = {
        'default': ThreadPoolExecutor(20),
        'processpool': ProcessPoolExecutor(5)
    }
    job_defaults = {
        'coalesce': False,
        'max_instances': 1,
        'misfire_grace_time':1200
    }
    scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)
    #jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc
    return scheduler

我在应用程序中启动了作业调度程序:

sch = letschedule()
sch.start()
log.info('the scheduler started')

我有以下添加工作职能。

def addjobs():


    jobs = []
    try:
        sch.add_job(forecast_jobs, 'cron', day_of_week=os.environ.get("FORECAST_WEEKOFDAY"),  
            id="forecast",
             replace_existing=False,week='1-53',hour=os.environ.get("FORECAST_HOUR"), 
             minute=os.environ.get("FORECAST_MINUTE"), timezone='UTC')
        jobs.append({'job_id':'forecast', 'type':'weekly'})

        log.info('the forecast added to the scheduler')
    except BaseException as e:
        log.info(e)
        pass
    try:
        sch.add_job(insertcwhstock, 'cron', 
            id="cwhstock_data", day_of_week='0-6', replace_existing=False,hour=os.environ.get("CWHSTOCK_HOUR"),
            minute=os.environ.get("CWHSTOCK_MINUTE"),
            week='1-53',timezone='UTC')
        jobs.append({'job_id':'cwhstock_data', 'type':'daily'})
        log.info('the cwhstock job added to the scheduler')
    except BaseException as e:
        log.info(e)
        pass
    return json.dumps({'data':jobs})

我在烧瓶应用程序中使用它,我调用/ activatejobs并将作业添加到调度程序,它工作正常。但是,当我重新启动wsgi服务器时,作业不会再次启动,我将删除.sqlite文件并再次添加作业。我想要的是一旦调度程序启动(如果数据库中已有作业),应该自动重新启动作业。 我试图在某些方面尝试获得这样的结果,但不能。任何帮助将不胜感激。提前致谢。

0 个答案:

没有答案