gpt4 book ai didi

python - 使用指数回退重试 Celery 任务

转载 作者:IT老高 更新时间:2023-10-28 21:43:06 30 4
gpt4 key购买 nike

对于这样的任务:

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 等秒之后?

也是从服务器端维护重试,这样如果 worker 碰巧被杀死,那么下一个产生的 worker 将接受重试任务?

最佳答案

task.request.retries属性包含到目前为止的尝试次数,所以你可以用它来实现指数退避:

from celery.task import task

@task(bind=True, max_retries=3)
def update_status(self, auth, status):
try:
Twitter(auth).update_status(status)
except Twitter.WhaleFail as exc:
raise self.retry(exc=exc, countdown=2 ** self.request.retries)

为了防止 Thundering Herd Problem ,您可以考虑在指数退避中添加随机抖动:

import random
self.retry(exc=exc, countdown=int(random.uniform(2, 4) ** self.request.retries))

关于python - 使用指数回退重试 Celery 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731435/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com