[英]Fan-out and subsequent synchronization with celery
我正在使用python(2.x)和celery开发一个(至少是这样)的简单扇出系统。 基本思想是在一组输入文档中的每个文档上运行某种算法的变体,然后使用另一种算法对输出进行相同的操作(以此类推几次)。 因此或多或少:
doc1
/|\
doc1_1 doc1_2 doc1_3
/|\ /|\ /|\
doc1_1_2 ....
另外,能够在此执行链中的特定点进行同步将很有帮助。 这不是至关重要的,但是会减少整体执行时间。
我尝试在任务中创建和执行组,但是无法找到这些子任务是否失败或什至完成。 构建大量的链似乎有些une昧(此处是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访问链结果似乎也可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.