在调用add_job()之后,作业没有存储在数据库中

时间:2019-04-03 10:18:52

标签: python postgresql apscheduler

我正在尝试使用 Flask-APScheduler 运行一些延迟的作业,并且在设置并运行应用程序后,它成功在Postgres数据库中创建了作业表,但没有在{{1}之后将作业保存在那里}已成功调用。

config.py (试图使用默认的表模式和表名,但仍未存储任何作业)

add_job()

添加作业代码 (显示的两个日志消息和SCHEDULER_TIMEZONE = utc SCHEDULER_API_ENABLED = False SCHEDULER_JOBSTORES = { 'default': SQLAlchemyJobStore( url=SQLALCHEMY_DATABASE_URI, tableschema=DB_SCHEMA, tablename='jobs' ) } SCHEDULER_EXECUTORS = { 'default': ThreadPoolExecutor(20), 'processpool': ProcessPoolExecutor(5) } SCHEDULER_JOB_DEFAULTS = { 'coalesce': False, 'max_instances': 3 } 正文均被忽略。也尝试隐式设置except但仍然存在相同的问题)

jobstore='default'

job.py (要运行的测试作业)

date = datetime.strptime(date_string, DATETIME_FORMAT)

try:
    app.logger.info('adding job')
    scheduler.add_job(
        job_id,
        publish_post,
        name=job_name,
        trigger='date',
        next_run_time=date,
        kwargs={
            'channel': channel,
            'post': post
        }
    )
    app.logger.info('job added')

except Exception as e:
    app.logger.error(e)
    sentry.captureException()
    return {
        'status': 'FAILED',
        'message': 'Can not add job ({})'.format(job_name)
    }

UPD:

在启动调试模式时,我收到以下消息:

def publish_post(channel, post):
    app.logger.info('{}: {}'.format(channel, post.text))

但是在gunicorn_scheduler_1 | 2019-04-04 07:07:21 - INFO - Scheduler started gunicorn_scheduler_1 | 2019-04-04 07:07:21 - DEBUG - No jobs; waiting until a job is added add_job()之间的adding job通话之后,我收到了来自APScheduler的另一条消息:

job added

但是第一则消息表明调度程序已经启动。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我用1条线设置数据库解决了 例: scheduler = BlockingScheduler(jobstores = jobstores(您不需要此参数),执行程序=执行程序,job_defaults = job_defaults,时区='Etc / GMT + 3')

调度程序= BlockingScheduler(执行程序=执行程序,job_defaults = job_defaults,时区='Etc / GMT + 3') -使用此行来设置数据库

scheduler.add_jobstore('sqlalchemy',url ='sqlite:///jobs.sqlite')

它完成了您的工作,开始保存在数据库内部