【发布时间】:2019-08-24 20:11:19
【问题描述】:
我正在尝试使用 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
但在adding job 和job added 之间调用add_job() 之后,我收到了来自APScheduler 的附加消息:
2019-04-04 07:09:46 - INFO - Adding job tentatively -- it will be properly scheduled when the scheduler starts
但第一条消息告诉调度程序已经启动。
【问题讨论】:
-
APScheduler 日志是什么?
-
@TomášLinhart 除了我的
adding job和job added一个接一个地记录之外,没有其他日志。这两个是唯一的输出。 -
尝试将日志级别设置为
DEBUG。如何做到这一点完全取决于您的 Flask 日志记录设置以及您运行 Flask 应用程序的方式。 -
@TomášLinhart 你是对的。它增加了一行输出
Adding job tentatively -- it will be properly scheduled when the scheduler starts,我在阅读源代码时看到了这条消息。但是我在运行应用程序时启动调度程序,并作为证据创建数据库表,并且此操作也在调度程序启动时运行。 -
仍然缺少一些重要的信息。您用来实例化 APScheduler 的代码是什么?你如何启动 Flask 应用程序?据我所知,我猜你使用 gunicorn 和 docker compose。但是 gunicorn 的命令行到底是什么?我会说它源于使用多个 gunicorn 工作人员,但只实例化(和启动)调度程序一次,但无法真正分辨。无论如何,请注意this FAQ(以及之后的那个)。
标签: python postgresql apscheduler