跑任务写脚本时最烦的就是刷出来一屏 429 Too Many Requests。它一般不是 Bug,是你的请求量触达了服务商限流。
报错现象
短时间内批量调用,接口连续返回:
429 Too Many Requests
原因分析
同一个 API 密钥在短时间内请求量过大,触达服务商的 RPM(每分钟请求数)/ TPM(每分钟 token 数) 限流规则。常见诱因:
- 脚本里的循环没加间隔,瞬间打满配额
- 多个脚本共用一个密钥
- 重试逻辑写成死循环,失败后立刻重发
解决步骤(按顺序做)
- 暂停调用等待冷却:先停脚本,等 30-60 秒让计数窗口刷新。这一步能解决一大半问题。
- 更换备用密钥:如果有多个密钥,换一个没到限流的继续跑。
- 降低并发请求速度:在循环里加延时,或用队列串行化:
import time, random
for item in tasks:
call_api(item)
time.sleep(random.uniform(0.5, 1.5)) # 每次请求间隔,避免瞬间打满
- 切换本地离线模型:如果只是内部测试/重复任务,直接改用 Ollama 本地模型,彻底绕开云端限流。
效果验证
- 429 消失,任务稳定跑完
- 服务商后台的用量统计不再触顶
排错速查表
| 场景 | 优先级 |
|---|---|
| 临时小批量触发 | 等冷却即可 |
| 长期跑批任务 | 降并发 + 加间隔 |
| 并发要求高 | 换备用密钥分流 |
| 非必须云端 | 切本地 Ollama |
核心经验:429 的正确姿势是「先停再想」。盲目加并发重试只会让限流时间更长,必要时直接本地化绕开。