У меня есть модель Django с колонкой celery_task_id
. Я использую RabbitMQ
в качестве брокера. Существует функция сельдерея, называемая test_celery
, которая принимает модельный объект в качестве параметра. Теперь у меня есть следующие строки кода, которые создают задачу сельдерея.Изменился ли идентификатор задачи сельдерея после перераспределения
def create_celery_task():
celery_task_id = test_celery.apply_async((model_obj,), eta='Future Datetime Object')
model_obj.celery_task_id = celery_task_id
model_obj.save()
----
----
Теперь внутри функции сельдерея я проверки, если идентификатор задачи такой же, как из одной хранимой в БД или нет.
@app.task
def test_celery(model_obj):
if model_obj.celery_task_id == test_celery.request.id:
## Do something
Моя проблема в том, что есть много случаев, когда я вижу задачу быть получен и успех в журнале, но не выполняет код внутри если условия.
Возможно ли, что идентификатор задачи сельдерея изменится после перераспределения. Или есть другие причины.
Но все же это не отвечает на вопрос. Будет ли «test_celery.request.id» изменяться во время процесса синхронизации rabbitmq или во время повторного распределения работников. – Pattu
Я думаю, что ID не меняется. Я предполагаю, что левая часть условия не работает, т. Е. Model_obj.celery_task_id, потому что вы предоставляете объект задаче. Ваша догадка заключается в том, что test_celery.request.id изменяется во время процесса синхронизации, и это вызывает проблему. –