Как вы препятствуете Celery выполнять периодическое задание до завершения предыдущего выполнения?
У меня есть кластер серверов, связанный с общим сервером базы данных, выполняющий задачи Celery, и я обнаружил, что каждый сервер может иногда запускать одну и ту же задачу одновременно, а также разные серверы, выполняющие одну и ту же задачу одновременно. Это вызывает множество состояний гонки, которые портят мои данные болезненно тонкими способами.
Я перечитывал документы Сельдерея , но я не могу найти ни одного варианта, который бы явно разрешал это. Я нашел похожий вопрос , но предложенное исправление выглядит как хак, поскольку оно опирается на инфраструктуру кэширования Django и поэтому может не использоваться всеми серверами в кластере, что позволяет нескольким серверам по-прежнему выполнять одно и то же задание одновременно.
Есть ли какая-либо опция в Celery, чтобы записывать, какие задачи выполняются в данный момент в базе данных, и не запускать снова, пока запись в базе данных не будет очищена?
Я использую модуль Django-Celery, и хотя он предоставляет pages / admin / djcelery / taskstate / и / admin / djcelery / workertate /, я никогда не видел долгое время задачи или рабочие появляются там.