繁体   English   中英

扇出并随后与芹菜同步

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM