我有一个芹菜任务,我正在尝试从postrongave信号打电话。
信号为:
@receiver(post_save, sender='foo.ModelClass')
def execute_after_save(sender, instance, created, *args, **kwargs):
special_task.apply_async(kwargs={'bar': instance.pk}, countdown=5)
任务是:
@app.task(bind=True)
def special_task(bar, *args, **kwargs):
bar = ModelClass.objects.select_for_update().get(pk=bar)
print('Bar attribute: %s' % bar.attribute)
在此迭代中,我遇到了一个错误,说special_task() got multiple values for argument 'bar'
。在迭代中,我只发送acm.pk作为arg,我得到一个typeError,说我需要通过整数。当我的信号看起来像:
@receiver(post_save, sender='foo.ModelClass')
def execute_after_save(sender, instance, created, *args, **kwargs):
special_task.apply_async(args=(instance.pk,), countdown=5)
我遇到了一个错误,说具有该属性DoesNotExist
的模型级。
我已经看了另一个,所以对此问题进行了疑问,但是我遇到了相同的错误。使用django 1.11.4,Python 3.5上的芹菜3.1.25。
此任务最终试图选择一个新保存的模型类,对其进行其他工作,然后再次保存。我该怎么做?
[编辑:这是我的堆栈跟踪:]
[2017-09-19 12:31:01,275: ERROR/MainProcess] Task projectname.foo.tasks.special_task[476904d9-78ed-489f-a47e-2c38fe8c64c9] raised unexpected: TypeError("special_task() got multiple values for argument 'bar'",)
Traceback (most recent call last):
File "/home/brandon/projects/python/lib/python3.5/site-packages/celery/app/trace.py", line 240, in trace_task
R = retval = fun(*args, **kwargs)
File "/home/brandon/projects/python/lib/python3.5/site-packages/celery/app/trace.py", line 438, in __protected_call__
return self.run(*args, **kwargs)
TypeError: special_task() got multiple values for argument 'bar'
基于您提供的最新追溯,当您使用bind=True
时,该任务的第一个参数应为 self
,请参见绑定任务:
@app.task(bind=True)
def special_task(self, bar, *args, **kwargs):
bar = ModelClass.objects.select_for_update().get(pk=bar)
print('Bar attribute: %s' % bar.attribute)