Я создаю Django приложение, которое использует APScheduler для отправки ежедневного электронного письма в назначенное время каждый день. Недавно было принято решение увеличить количество экземпляров до двух, чтобы в случае сбоя одного из экземпляров что-то всегда работало. Проблема, с которой я сейчас сталкиваюсь, заключается в том, как предотвратить отправку ежедневных электронных писем обоими экземплярами. Я рассмотрел возможность установки какого-либо флага в базе данных (Postgres), чтобы другой экземпляр знал, что не нужно отправлять, но я думаю, что этот метод создаст условия гонки - первый экземпляр не установит флаг вовремя для второго экземпляра, чтобы увидеть или какой-то похожий сценарий. Кто-нибудь сталкивался с этой проблемой и как вы ее решили?
РЕДАКТИРОВАТЬ:
def start():
scheduler = BackgroundScheduler()
scheduler.add_job(send_daily_emails, 'cron', hour=11)
scheduler.start()
Так что это запускается, когда мое приложение инициализируется - это создает фоновый планировщик, который запускает функцию send_daily_emails
в 11 утра каждое утро. Функция send_daily_emails
это именно то, что она делает - отправляет пару писем. Моя проблема заключается в том, что если запущено два экземпляра приложения, будут созданы два отдельных фоновых планировщика, и, таким образом, электронные письма будут отправляться два раза в день, а не один раз.