APScheduler сбрасывается после каждого развертывания - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть скрипт, который при запуске добавляет задачи разбора rss-фида в некоторые очереди сельдерея.Теперь я реализовал apscheduler для запуска скрипта каждые 2 часа для получения новых данных из каналов.

Моя реализация выглядит так:

#!/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. Я храню задание планировщика в постоянном хранилище, и я даже вижу его в своей БД, но когда яdo scheduler.get_job (PARSER_SCHEDULER, 'scheduler_config') Я получаю Нет
  2. Всякий раз, когда я развертываюсь на heroku, я думаю, что следующий запуск обновляется.Например, если парсер настроен на запуск каждые 2 часа, а следующий запуск будет в 16:00, и если я разверну на Heroku в 15:00, то мой следующий запуск произойдет в 17:00 вместо 16:00.

1 Ответ

0 голосов
/ 18 февраля 2019

Не уверен насчет вашей проблемы № 1, но я думаю, что проблема № 2 заключается в том, что при каждом развертывании эта строка заменяет задание, таким образом сбрасывая расписание:

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