APScheduler запускается дважды на Django Heroku
Я использую APScheduler (backgroundScheduler) для запуска фонового задания на Django, развернутом на Heroku. Задание должно выполняться раз в минуту.
Я использую конечную точку представления для запуска планировщика. В итоге /run вызывается несколько раз, но должен запускаться только один планировщик.
Локально это работает как шарм. Однако при развертывании на Heroku вызов /run несколько раз запускает еще один фоновый планировщик. Интересно, что запускается два планировщика, а не больше.
Я подумал, не может ли это быть связано с потоками? Может быть, /run вызывается в разных потоках. Любая помощь будет очень признательна!
views.py
def run(request):
if cgm_receiver.scheduler.running:
logger.info('Background service was already running')
else:
logger.info('Background service was not running')
logger.info("Starting background service")
cgm_receiver.scheduler.add_job(cgm_receiver.timed_job,
id='cgm_receiver',
replace_existing=True,
trigger='interval',
minutes=1)
cgm_receiver.scheduler.start()
return render(request, "run.html")
Это вывод после первого вызова /run
at=info method=GET path="/run/" host=**** request_id=2bfe4eb3-47dc-41bc-afb9-2f1f20217d9f dyno=web.1 connect=0ms service=5327ms status=200 bytes=3330 protocol=https
. 2022-02-06 16:48:13,995 | INFO | cgm_importer.views : Фоновая служба не запущена
2022-02-06 16:48:13,996 | INFO | cgm_importer.views : Запуск фоновой службы
2022-02-06 16:48:14,001 | INFO | apscheduler.scheduler : Добавление задания предварительно - оно будет правильно запланировано при запуске планировщика
2022-02-06 16:48:14,001 | INFO | apscheduler.scheduler : Добавлено задание "timed_job" в хранилище заданий "default"
. 2022-02-06 16:48:14,001 | INFO | apscheduler.scheduler : Планировщик запущен
Вызываю второй раз
10.1.0.196 - - - [06/Feb/2022:16:48:14 +0000] "GET /run/ HTTP/1.1" 200 3069 "-" at=info method=GET path="/run/" host=**** request_id=1ab97b28-d148-44a8-8604-4d88cc219aca fwd="****" dyno=web.1 connect=0ms service=2ms status=200 bytes=3305 protocol=https
2022-02-06 16:48:37,991 | INFO | cgm_importer.views : Фоновая служба уже запущена
Вызов в третий раз создает второй планировщик
[06/Feb/2022:16:48:37 +0000] "GET /run/ HTTP/1.1" 200 3044 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"
> at=info method=GET path="/run/" host=**** request_id=dfc8afe9-9e8a-47fd-b874-8f6da4b986a9 fwd="****" dyno=web.1 connect=0ms service=1459ms status=200 bytes=3330 protocol=https
. 2022-02-06 16:48:53,831 | INFO | cgm_importer.views : Фоновая служба не запущена
2022-02-06 16:48:53,832 | INFO | cgm_importer.views : Запуск фоновой службы
2022-02-06 16:48:53,836 | INFO | apscheduler.scheduler : Добавление задания предварительно - оно будет правильно запланировано, когда планировщик запустится
2022-02-06 16:48:53,837 | INFO | apscheduler.scheduler : Добавлено задание "timed_job" в хранилище заданий "default"
. 2022-02-06 16:48:53,837 | INFO | apscheduler.scheduler : Планировщик запущен