【发布时间】:2011-06-19 09:02:39
【问题描述】:
我在重试任务时遇到问题,这是测试任务的样子
from celery.decorators import task
@task()
def add(x, y):
if not x or not y:
raise Exception("test error")
return x+y
我找不到任何关于如何重试装饰任务的文档,我只找到了以下内容:
self.retry(x,y, exc=exception, countdown=30)
这似乎不适用于我的情况,因为该方法没有传递 self 变量。
编辑:
我现在尝试以下方法无济于事:
from celery.decorators import task
@task()
def add(x, y):
if not x or not y:
try:
raise Exception("test error")
except Exception, e:
add.retry([x, y], exc=e, countdown=30)
return x+y
我收到以下错误:
TypeError("重试的kwargs参数不能为空。任务必须接受**kwargs,见http://bit.ly/cAx3Bg",)
【问题讨论】:
-
没有自我,因为你的任务没有绑定。这是 Celery 3.1 中的一个新概念:
@task(bind=True) def add(self, x, y):。如果您使用早期版本,则必须引用任务名称:add.retry(...)。 -
另外,你得到最后一个错误是因为你没有为任务指定关键字参数:
add.retry([x, y], {}, exc=e, countdown=30) ought to work, but you don't have to specifyx` 和y这里(除非函数改变了它们的值), becauseretry`将自动使用用于调用任务的参数:add.retry(exc=e, countdown=30)。
标签: python django scheduled-tasks celery django-celery