好吧,我已经倒在所有SO帖子,芹菜文档等上...而我只是无法弄清楚。无论我尝试什么或尝试从Django应用程序调用任务,芹菜都抱怨我没有提供所需的参数。
" typeError:add()缺少2个必需的位置参数:'x'和'y'。
我正在遵循他们的文档中的一个非常简单的示例...仅使用延迟,例如:
add.delay(1, 2)
仍然存在相同的错误。我还尝试了add.delay(x=1, y=2)
,celery.send_task("add", [1, 2])
和我在各种帖子中看到的任务的其他多种方式,并且它们都没有用。
该方法非常简单:
@shared_task
def add(x, y):
return x + y
我也尝试过命名,例如:
@task(name="my_add")
def add(x, y):
return x + y
相同的结果。我还可能缺少什么?
首先,您应该在帖子中添加更多信息,以与您的django&芹菜配置。
,但我认为您的错误在@Task Decorator上,因为您似乎需要使用绑定任务:
- 被绑定的任务意味着任务的第一个参数将始终就像python绑定的方法一样,是列为实例(自我)。参考。
- 另一方面, bind 参数意味着该函数将是"绑定方法",以便您可以在任务类型实例上访问属性和方法。参考
,您的代码应该看起来像:
import celery
@task(bind=True, name="my_add")
def add(self, x, y):
return x + y
请注意,绑定参数与任务装饰器将提供对自我的访问(任务类型实例)。
最后,我建议您再次查看Django上的芹菜设置。