对于这样的任务:
from celery.decorators import task
@task()
def add(x, y):
if not x or not y:
raise Exception("test error")
return self.wait_until_server_responds(
如果它抛出一个异常,我想从守护程序的角度重试它,如何应用指数退避算法,即在2^2,2^3,2^4
等秒钟后重试?
另外,重试是否由服务器端维护,以便如果工作进程被杀死,下一个生成的工作进程将接管重试任务?
@task(bind=True)
,celery 将会把self
作为函数的第一个参数传递进去,所以你需要改变参数为def update_status(self, auth, status):
,这样你就能访问到self.retries
。 - robbytretries
是request
的属性,所以正确的调用方式是self.request.retries
。 - tutuDajuju@task(bind=True)
调用任务的例子?通常我只会这样做:from tasks.py import update_status; update_status(auth, status)
,但是我应该传递什么给self
? - Matt