2015-05-10 1 views
1

Как я должен получить имя задачу в, когда я получил свой AsyncResult объект и, следовательно, его id?Получить TASK_NAME от AsyncResult при подаче цепи в сельдерее

Например, если я запускаю два из моих задач в цепочке:

>>> task_chain = (task_A.s() | task_B.s()) 
>>> async_result = task_chain.apply_async() 

я могу извлечь id из task_B и, следовательно task_A с использованием внутреннего _parents() метода, как это:

>>> async_result.id 
>>> 2ed28e84-0673-4491-a56f-c5ab8dfb5725 
>>> async_result._parents()[0].id 
>>> e793f4dc-5110-4f57-8f98-8caa48c40528 

Однако, когда я пытаюсь получить имя_события, я ничего не получаю:

>>> async_result.task_name 
>>> async_result._parents()[0].task_name 

Почему это происходит? Может быть, это может быть ошибка? Я заметил, что, отправив одну задачу, атрибут task_nameAsyncResult работает отлично и возвращает правильное имя задачи.

Есть ли другой способ получить имя задачи из объекта AsyncResult?

Благодарим вас заблаговременно.

P.S. Здесь я уже нашел аналогичный вопрос, но никто, кажется, не предлагает практического и рабочего решения.

celery-users

UPDATE

Видимо, кажется, что я хит стену с этим. Существует открытый билет на github о той же самой проблеме с той разницей, что это касается групп вместо цепей.

https://github.com/celery/celery/issues/2504

ответ

-3

Один из способов сделать это сохранить его в кэш, как, что:

cache.set(hash_key, result, 30) # save result to cache for 30 seconds 

и вы можете получить его с помощью его ключа:

result = cache.get(hash_key) 

Предполагая, что его не InMemory кэш

ОБНОВЛЕНИЕ

Извините, я неверно истолковал вопрос.

Что я думаю, так это то, что результат task_chain AsyncResult инициализируется только идентификатором задачи как его единственным требованием. Может быть, если вы пытаетесь что:

async_result = task_chain.apply_async(name="mytasks") 

но я would't рассчитывать на это

+0

Ваш первый ответ не имеет никакого значения. С другой стороны, ваше обновление предполагает использование параметра 'name' метода' apply_async', который не принимает такой атрибут. – kstratis

Смежные вопросы