事情本身不复杂,线索都在日志里。批量生成产品描述时偶发 503,返回体提示 The engine is currently overloaded, please try again later,脚本按固定一秒重试,结果越重试失败越多。

第一反应是「没有设置最大重试次数,任务被无限拖住」,验证下来不成立。

真正麻烦的地方在于,几个原因的现象几乎一样。服务端短时容量不足,属于典型可重试错误。少数情况下是固定间隔重试让所有客户端在同一时刻再次撞上。

少数情况下是失败请求原样重发,长请求又加重了拥塞。

只对 429 与 5xx 做重试,其余直接失败

RETRY_STATUS = {429, 500, 502, 503, 504}

然后用指数退避加随机抖动拉开重试时间

delay = min(2 ** attempt, 32) + random.uniform(0, 1)

接着重试三次仍失败就落盘到补偿队列

python requeue.py --file failed.jsonl

剩下的就是统计重试分布,确认尖峰是否被削平

print({'attempt1': a1, 'attempt2': a2})

怎么算真的好了,看的是同一批现象。批处理完成后失败条数为零,日志里 503 的出现次数比之前下降一个量级,整体耗时不增反降。

提醒一点。重试次数不是越多越好,超过三次还失败的请求多半是内容或参数问题,继续重试只会把配额耗光,还会掩盖真正的错误。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189