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