Результат сельдерея. Время ожидания истекло

У меня есть два разных проекта django, скажем, projA и projB, каждый из которых имеет свой собственный демон сельдерея, работающий в отдельных очередях, но с одним и тем же vhost, у projA есть задача taskA, а у projB есть задача taskB, я пытаюсь запустить taskB изнутри taskA, например.

@task(routing_key='taskA')
def taskA(event_id):
    # do some work , then call taskB and wait for result
    result = send_task('taskB',routing_key='taskB')
    res = result.get(timeout=20)

Я вижу в журналах projB, что задача B завершена в течение секунды, но задача A продолжает ждать результата и истекает через 20 секунд.

Для бэкэнда у меня есть rabbitmq.


person Anurag Uniyal    schedule 18.08.2011    source источник
comment
Это предостерегает от запуска подзадач, но если задача B завершается, это может не быть причиной вашей проблемы: ask.github.com/celery/userguide/   -  person SteveMc    schedule 18.08.2011
comment
да, это предупреждение о возможных взаимоблокировках, но у меня есть 7 одновременных процессов для каждой очереди и только 1 задача, поэтому этого не должно происходить   -  person Anurag Uniyal    schedule 18.08.2011


Ответы (1)


Установка бэкенда результата устранила проблему

CELERY_RESULT_BACKEND = "amqp"
CELERY_AMQP_TASK_RESULT_EXPIRES = 1000 

IMO, если серверная часть результата не установлена, result.get должен выдать ошибку или, по крайней мере, зарегистрировать предупреждение

Хотя сельдерей 2.3 выдает ошибку, как описано здесь https://github.com/ask/django-celery/issues/66

person Anurag Uniyal    schedule 22.08.2011