Получение task_ids для всех задач, созданных с помощью celery chord

Моя цель — получить все идентификаторы задач из вызова аккорда django celery, чтобы я мог отозвать задачи позже, если это необходимо. Однако я не могу найти правильный метод для получения идентификаторов задач. Я исполняю аккорд как:

c = chord((loadTask.s(i) for i in range(0, num_lines, CHUNK_SIZE)), finalizeTask.si())
task_result = c.delay()
# get task_ids

Я проверил дочернюю переменную task_result, но это None.

Я могу вручную создать семантику аккорда, используя группу и другую задачу, как показано ниже, и получить связанные идентификаторы задач, но мне не нравится разбивать вызов. Когда этот код запускается в задаче как подзадачи, это может привести к зависанию основной задачи, когда группа отзывается до начала задачи финализации.

g = group((loadTask.s(i) for i in range(0, num_lines, CHUNK_SIZE))) 
task_result = g.delay()
storeTaskIds(task_result.children)
task_result.get()

task_result2 = self.finalizeTask.delay()
storeTaskIds([task_result2.task_id])

Любые мысли будут оценены!


person user2701815    schedule 12.09.2013    source источник


Ответы (1)


Я пытаюсь сделать что-то подобное, я надеялся, что смогу просто отозвать аккорд одним вызовом, и все внутри него будет рекурсивно отозвано для меня.

Вы можете сделать аккорд из группы и вашего finalizeTask, чтобы не прерывать разговоры.

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

person abrugh    schedule 18.11.2013