我可以在没有结果后端的情况下组合链和组吗?

Eri*_*ken 2 python celery

我喜欢将一条链和一个组组合在一个由不可变任务组成的小型工作流程中,并且没有结果后端。

然而,当我尝试这个 Celery 时,它会自动将其转换为和弦,然后抱怨没有结果后端。

有什么方法可以在没有结果后端的情况下让它工作吗?

代码:

@shared_task
def test_canvas():    
    workflow = chain(group(test_task_a.si(), test_task_b.si()), test_task_c.si())
    workflow.delay()
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误消息:

raised unexpected: NotImplementedError('Starting chords requires a result backend to be configured.
Note that a group chained with a task is also upgraded to be a chord, as this pattern requires synchronization.
Result backends that supports chords: Redis, Database, Memcached, and more.',)
Run Code Online (Sandbox Code Playgroud)

有趣的是,单独运行一个链或一个组就可以了。

例子:

workflow = chain(test_task_a.si(), test_task_b.si(), test_task_c.si())
workflow.delay()
Run Code Online (Sandbox Code Playgroud)

Ita*_*ayB 6

不幸的是,我认为答案是否定的 - 如果没有后端,你就无法运行和弦:

和弦中使用的任务不得忽略其结果。实际上,这意味着您必须启用 result_backend 才能使用和弦。

您的第一个示例test_canvas是隐式的chord:和弦是一项仅在组中的所有任务完成执行后才执行的任务(链接)。如果您考虑背后的逻辑(在这里详细解释),某人(后端)需要弄清楚所有并行任务(组)何时结束,以知道何时应该触发下一个(链式)任务。

在第二个示例中,同时运行多个任务group很简单(如果不采取任何操作,则稍后无需协调)。同样chain- 每个任务负责触发下一个任务,不需要复杂的协调。