只使用“T.s([args])”来调用芹菜任务是错误的吗?



背景故事

在 Celery 文档的第一部分中,对于"调用任务",他们描述了使用 delay()apply_async() ,例如:

task.delay(arg1, arg2, kwarg1='x', kwarg2='y')
task.apply_async(args=[arg1, arg2], kwargs={'kwarg1': 'x', 'kwarg2': 'y'})

他们继续解释:

所以延迟显然很方便,但如果你想设置额外的执行选项,你必须使用apply_async。

我想要额外的选项,但是将 args/kwargs 传递给apply_async()对我来说看起来很丑陋。

相反,我只是一直在使用Task.s()(签名(,因为我可以以一种读起来像函数的方式传入 args,只需附加对apply_async()的调用。

解释一下,这是我创建它们的大多数任务的样子:

task_id = cool_task.s(arg1, arg2).apply_async()

。纯粹是为了美学。

问题

我是否忽略了以这种方式调用任务的一些缺点?

根据我阅读的 Celery Canvas 文档,我知道我没有使用签名来发挥它们的潜力。但是我做了什么,以后可能会咬我吗?

使用签名或部分调用任务没有问题。但是,在某些情况下,您可能会将一些参数传递给部分参数,然后在以后传递剩余的参数。

在这种情况下,您应该小心。如果在参数不正确的链中使用部分,则上一个任务会将其结果发送到部分,这可能不是您想要的。在这种情况下,您可以使用不可变签名。

相关内容

  • 没有找到相关文章

最新更新