我正在尝试使用Flask-APScheduler运行一些延迟的作业,并且在设置和运行应用程序后,它成功地在Postgres数据库中创建了作业表,但是在成功调用add_job()
之后并没有将作业保存在那里。
config.py((尝试使用默认的表模式和表名,但仍未存储任何作业)
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'
,但仍然是相同的问题)
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)
}
job.py(要运行的测试作业)
def publish_post(channel, post):
app.logger.info('{}: {}'.format(channel, post.text))
UPD:
在启动调试模式时,我收到以下消息:
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
之间的job added
调用之后,我有来自APScheduler的其他消息:
2019-04-04 07:09:46 - INFO - Adding job tentatively -- it will be properly scheduled when the scheduler starts
但是第一则消息表明调度程序已经启动。
我遇到了同样的问题,我用1条线来设置数据库解决了例:调度程序= BlockingScheduler(jobstores = jobstores(您不需要此参数),执行程序=执行程序,job_defaults = job_defaults,时区='Etc / GMT + 3')
scheduler = BlockingScheduler(executors = executors,job_defaults = job_defaults,timezone ='Etc / GMT + 3')-使用此行来设置您的数据库
scheduler.add_jobstore('sqlalchemy',url ='sqlite:///jobs.sqlite')] >>
完成了您的工作,开始将其保存到数据库中