我可以在没有结果后端的情况下组合链和组吗?
Can I combine chain and group without a results backend?
我喜欢在不可变任务的小型工作流中结合链和组,并且没有结果后端。
然而,当我尝试这个 Celery 时自动将其转换为和弦,然后抱怨没有结果后端。
有什么方法可以在没有结果后端的情况下使它工作?
代码:
@shared_task
def test_canvas():
workflow = chain(group(test_task_a.si(), test_task_b.si()), test_task_c.si())
workflow.delay()
这是我收到的错误消息:
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.',)
有趣的是,运行 一个链或一个组本身就可以正常工作。
示例:
workflow = chain(test_task_a.si(), test_task_b.si(), test_task_c.si())
workflow.delay()
不幸的是,我认为答案是否定的 - 你不能 运行 和弦没有 backend:
Tasks used within a chord must not ignore their results. In practice this means that you must enable a result_backend in order to use chords.
你在 test_canvas
中的第一个例子是隐含的 chord
:
chord 是仅在组中的所有任务都完成执行后才执行的任务 (link)。
如果你想想背后的逻辑(很好解释here)
某人(后端)需要弄清楚所有并行任务何时结束(组)才能知道何时应该触发下一个(链接的)任务。
在第二个示例中,运行与 group
并发执行多个任务很简单(如果不采取任何行动,则稍后无需协调)。
chain
也一样 - 每个任务负责触发下一个任务,不需要复杂的协调。
我喜欢在不可变任务的小型工作流中结合链和组,并且没有结果后端。
然而,当我尝试这个 Celery 时自动将其转换为和弦,然后抱怨没有结果后端。
有什么方法可以在没有结果后端的情况下使它工作?
代码:
@shared_task
def test_canvas():
workflow = chain(group(test_task_a.si(), test_task_b.si()), test_task_c.si())
workflow.delay()
这是我收到的错误消息:
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.',)
有趣的是,运行 一个链或一个组本身就可以正常工作。
示例:
workflow = chain(test_task_a.si(), test_task_b.si(), test_task_c.si())
workflow.delay()
不幸的是,我认为答案是否定的 - 你不能 运行 和弦没有 backend:
Tasks used within a chord must not ignore their results. In practice this means that you must enable a result_backend in order to use chords.
你在 test_canvas
中的第一个例子是隐含的 chord
:
chord 是仅在组中的所有任务都完成执行后才执行的任务 (link)。
如果你想想背后的逻辑(很好解释here)
某人(后端)需要弄清楚所有并行任务何时结束(组)才能知道何时应该触发下一个(链接的)任务。
在第二个示例中,运行与 group
并发执行多个任务很简单(如果不采取任何行动,则稍后无需协调)。
chain
也一样 - 每个任务负责触发下一个任务,不需要复杂的协调。