планирование работы с питоном: все рабочие запускают задачу планировщика - PullRequest
0 голосов
/ 28 марта 2019

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

    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())

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

У кого-нибудь есть идея, как заставить одного работника оправдать call_function_to_do()?

1 Ответ

0 голосов
/ 29 марта 2019

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

...