Как убедиться, что задача Celery предотвращает перекрытие выполнения задач Celery

Как предотвратить выполнение периодических задач Celery до завершения предыдущего выполнения?

У меня есть кластер серверов, связанных с общим сервером базы данных, выполняющих задачи Celery, и я обнаружил, что каждый сервер может иногда выполнять одну и ту же задачу одновременно, а также разные серверы, выполняющие одну и ту же задачу одновременно. Это вызывает множество состояний гонки, которые болезненно тонким образом искажают мои данные.

Я читал документы Celery, но не нашел ни одной опции, которая явно разрешала бы это.Я нашел похожий вопрос, но предложенное исправление похоже на взлом, поскольку оно основано на структуре кэширования Django и, следовательно, может не использоваться всеми серверами в кластере, что позволяет нескольким серверам по-прежнему выполнять одно и то же. задание одновременно.

Есть ли в Celery возможность записывать, какие задачи в настоящее время выполняются в базе данных, и не запускать их снова, пока запись в базе данных не будет очищена?

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

12
задан Community 23 May 2017 в 12:26
поделиться