我的目标是从 django celery chord 调用中检索所有 task_id,以便以后可以在需要时撤销任务。但是,我无法找出检索任务 ID 的正确方法。我执行和弦为:
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 的 children 变量,但它没有。
我可以通过使用组和另一个任务手动创建和弦语义,如下所示,并检索关联的 task_ids,但我不喜欢中断呼叫。当此代码作为子任务在任务中运行时,当组在 finalize 任务开始之前被撤销时,它可能会导致主任务挂起。
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])
任何想法将不胜感激!