对于这样的任务:
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
等秒之后?
重试是否也是从服务器端维护的,这样如果工人碰巧被杀,那么下一个产生的工人将接受重试任务?
原文由 Quintin Par 发布,翻译遵循 CC BY-SA 4.0 许可协议
task.request.retries
属性包含到目前为止的尝试次数,因此您可以使用它来实现指数退避:为了防止 Thundering Herd Problem ,您可以考虑在指数退避中添加随机抖动: