Использование django -celery chord, celery.chord _unlock продолжает выполняться вечно, не вызывая предоставленный обратный вызов

Я использую Django Celery с Redis для запуска нескольких подобных задач:

header = [
    tasks.invalidate_user.subtask(args = (user)),
    tasks.invalidate_details.subtask(args = (user))
]

callback = tasks.rebuild.subtask()

chord(header)(callback)   

Таким образом, в основном то же самое, что указано в документации .

Моя проблема в том, что когда вызывается этот аккорд задачи,celery.chord_unlockзадача постоянно повторяется . Задачи в headerзавершаются успешно, но из-за того, что chord_unlockникогда не выполняется,callbackникогда не вызывается .

Предполагая, что моя проблема заключается в невозможности определить, что задачи из headerзавершены, я обратился к документации, чтобы посмотреть, как это можно настроить. Я нашел раздел , описывающий, как реализована синхронизация, есть приведенный пример, чего мне не хватает, так это того, как мне вызвать эту примерную функцию (, т.е. есть ли сигнал для этого? ).

Далее следует отметить, что этот метод не используется с серверной частью Redis.:

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

Но также говорится, что подход Redis лучше:

Подход Redis и Memcached — гораздо лучшее решение

Что это за подход? Как это реализовано?

Итак, почему chord_unlockникогда не выполняется и как мне заставить его обнаруживать завершенные headerзадачи?

Я использую :Django 1.4, celery 2.5.3, django -celery 2.5.5, redis 2.4.12

9
задан Martin Tóth 3 May 2012 в 20:04
поделиться