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