每次部署后,APScheduler都会重置

时间:2019-02-13 13:37:42

标签: python-3.x heroku apscheduler

我有一个脚本,该脚本在运行时将rss feed解析任务添加到一些celery队列中。现在,我已经实现了apscheduler,每2小时运行一次脚本以从Feed中获取新数据。

我的实现如下:

#!/usr/bin/env python
import atexit
import logging
import os
from logging import getLogger

from apscheduler.schedulers.blocking import BlockingScheduler


logger = getLogger('scheduled_parser')
PARSER_SCHEDULER = 'parser_scheduler'


def main():
   scheduler = BlockingScheduler(job_defaults={'coalesce': True})
   scheduler.add_jobstore('sqlalchemy',alias='scheduler_config', url=os.environ.get("DATABASE_URL"))
   scheduler.add_job(run_parser, 'interval', seconds=int(os.environ.get("SCHEDULER_RUN_FREQUENCY")),
                     id=PARSER_SCHEDULER, replace_existing=True)
   scheduler.start()
   atexit.register(lambda: scheduler.shutdown())

def run_parser():
   < code to add items to queues>

if __name__ == "__main__":
   logging.basicConfig()
   logger.setLevel(logging.INFO)
   main()

我的代码已部署在heroku上,并且我的procfile中有以下内容

clock: python scheduled_parser
<celery worker processes>

我遇到以下问题:

  1. 我将调度程序作业存储在持久性存储中,甚至可以在数据库中看到它,但是当我执行scheduler.get_job(PARSER_SCHEDULER,'scheduler_config')时,我什么也没得到
  2. 每当我在heroku上部署时,我都认为下一次运行将被更新。例如,如果解析器设置为每2小时运行一次,而下一次运行将在4:00 pm运行,并且如果我在3:00 pm在Heroku上部署,那么我的下一次运行将在5:00 pm而不是4:00 pm进行。

1 个答案:

答案 0 :(得分:0)

不确定您的问题1,但我认为问题2是在每次部署中,此行将替换工作,从而重置计划:

   scheduler.add_job(run_parser, 'interval', seconds=int(os.environ.get("SCHEDULER_RUN_FREQUENCY")),
                 id=PARSER_SCHEDULER, replace_existing=True)