我正在研究一种(至少我认为如此)使用python(2.x)和芹菜的简单扇出系统。基本思想是在一组输入文档中的每一个上运行算法的一些变体,然后使用另一种算法对输出执行相同的操作(依此类推几次)。所以或多或少:
doc1
/|\
doc1_1 doc1_2 doc1_3
/|\ /|\ /|\
doc1_1_2 ....
此外,能够在此执行链中的某个点进行同步会很有帮助。这并不重要,但会缩短整体执行时间。
我尝试在任务中创建和执行组,但无法确定这些子任务是否失败甚至完成。建立大量的链似乎有些不雅(C程序员在这里没有权威)但至少我能够检索链中每个任务的当前状态。如果我正确地理解了相当模糊的文档,我就能够使用包含所有链的和弦进行同步,但似乎并不是获取每个链的状态的方法。
我不知道对芹菜设计范例不熟悉,稀疏的文档没有任何帮助。什么是"权利" (或者最不丑陋的)实现这样的方式?
答案 0 :(得分:0)
我得到了我想要构建大量链的结果,然后将它们全部放入一个组并执行它。我的代码或多或少看起来像这样:
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的链结果似乎也有效。