【问题标题】:Celery add task dynamically to chain芹菜将任务动态添加到链中
【发布时间】:2017-10-14 17:41:47
【问题描述】:

我在 Django 中使用 celery 3。
我在数据库中有一个工作列表。用户可以启动启动 celery 任务的特定作业。
现在我希望用户能够启动多个作业,它应该将它们添加到 celery 队列中并一个接一个地处理它们,而不是像异步那样并行处理。

我正在尝试使用 celery 创建一个作业调度程序,用户可以在其中选择要执行的作业,它们将按顺序执行。
如果我使用chain(),那么我无法动态地将新任务添加到链中。

什么是最好的解决方案?

【问题讨论】:

标签: python django celery


【解决方案1】:

更适合您使用的原语是 link,而不是 Celery 中的 chain

来自documentation

s = add.s(2, 2)
s.link(mul.s(4))
s.link(log_result.s())

您可以看到这如何让您通过循环遍历所需任务并链接每个任务的签名来动态添加要执行的任务。在循环之后,您可能需要调用 s.apply_async(...) 之类的东西来执行它们。

【讨论】: