#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.