我有一个脚本,该脚本在运行时将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>
我遇到以下问题:
答案 0 :(得分:0)
不确定您的问题1,但我认为问题2是在每次部署中,此行将替换工作,从而重置计划:
scheduler.add_job(run_parser, 'interval', seconds=int(os.environ.get("SCHEDULER_RUN_FREQUENCY")),
id=PARSER_SCHEDULER, replace_existing=True)