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 : Планировщик запущен

Вернуться на верх