планирование python flask: все рабочие запускают задачу планировщика

#python #flask #apscheduler

#python #flask #apscheduler

Вопрос:

Я использую запланированные задачи внутри приложения flask:

     import time
    import atexit

    from apscheduler.schedulers.background import BackgroundScheduler


    def intervall():
        with app.app_context():
            call_function_to_do()

    scheduler = BackgroundScheduler()
    scheduler.add_job(func=intervall, trigger="interval", seconds=5)
    scheduler.start()

    # Shut down the scheduler when exiting the app
    atexit.register(lambda: scheduler.shutdown())
  

Моя проблема в том, что все работники gunicorn запускают задачу планировщика. В этом случае проверяется ситуация с таймаутом и отправляется электронное письмо пользователю.

У кого-нибудь есть идея, как исключить только одного работника call_function_to_do() ?

Ответ №1:

В основном есть два варианта. Один из способов, описанных в FAQ, заключается в выделении планировщика в отдельный процесс и взаимодействии с процессом с использованием некоторого протокола удаленного доступа (например, с использованием RPyC). Другой метод заключается в запуске планировщика в приложении Flask, но убедитесь, что запущен только один такой экземпляр. Вы можете использовать какой-либо механизм блокировки, например, RedLock.