我正在使用python (2.x)和芹菜开发一个简单的扇形输出系统(至少我认为是这样)。基本思想是在每组输入文档上运行算法的一些变体,然后用另一种算法对输出执行相同的操作(以此类推,重复几次)。所以more or less:
doc1
/|
doc1_1 doc1_2 doc1_3
/| /| /|
doc1_1_2 ....
此外,能够在执行链中的某个点同步将是有帮助的。这并不重要,但会减少总体执行时间。
我尝试在任务中创建和执行组,但没有办法找出这些子任务是否失败甚至完成。构建大量的链似乎有些不优雅(C程序员在这里没有声称权威),但至少我能够检索链中每个任务的当前状态。如果我正确理解相当模糊的文档,我将能够使用包含所有链的和弦进行同步,但似乎没有办法获得每个链的状态。
我在这里不知所措,因为我不熟悉芹菜设计范例,而且稀疏的文档也没有帮助。实现这类东西的"正确"(或最不难看)方式是什么?
我得到的结果是,我想建立很多链,然后把它们全部放入一个组并执行它。我的代码看起来差不多是这样的:
res = []
for sequence in product(*input, *action):
method = getattr(tasks, sequence[1]['method'])
ch = chain(method.s(input_document, **(sequence[1])))
for seq in sequence[2:]:
method = getattr(tasks, seq['method'])
ch |= method.s(**seq)
res.append(ch)
r = group(res).apply_async()
r.save()
return r.id
基本上计算所有输入文档和操作的点积(算法设置),从任务模块检索相应的方法,将它们链接在一起,将它们全部放在一个组中,并执行它。
此外,如果您不忘记保存/恢复GroupResult,则访问GroupResult的链结果似乎可以工作。