Python循环调用GitHub API触发限流时如何重试当前迭代?
解决方案
实现这个需求的核心是给单个仓库ID的请求逻辑加上循环控制,只有成功获取到目标数据后才进入下一个ID的处理,代码修改如下:
import requests import time max_retry = 3 # 可选:设置最大重试次数,避免无限重试卡住 for i in repoID: # 获取仓库名称 retry_count = 0 while retry_count < max_retry: print(i) response= requests.get('https://api.github.com/repositories/{}'.format(i),headers=headers) res_json = response.json() if 'full_name' in res_json: repokey[str(i)] = res_json['full_name'] break # 成功获取,跳出当前ID的循环,处理下一个ID else: # 也可额外判断403响应状态码,确认是限流触发后再等待 print('触发限流,ID为{}的仓库请求失败,等待120秒,当前重试次数{}'.format(i, retry_count+1)) time.sleep(120) retry_count +=1 else: # 达到最大重试次数后的处理逻辑,可根据需求调整 print("ID为{}的仓库达到最大重试次数,跳过".format(i))
补充说明
- 上述代码给每个ID增加了最大重试次数限制,避免因为接口长期异常导致程序无限卡住,你可以根据自己的需求调整
max_retry的数值,或者移除重试次数判断改用无限重试。 - 如果你想更精准的控制等待时长,可以读取GitHub API响应头中的
X-RateLimit-Reset字段,该字段返回限流结束的时间戳,用这个值减去当前时间戳就能得到准确的等待时长,无需固定等待120秒。
内容的提问来源于stack exchange,提问作者Devarshi Goswami
相关产品推荐
相关产品推荐

