我正在使用python github3模块,我需要设置请求到github api之间的延迟,因为我的应用程序在服务器上负载很大。
我正在做这样的事情
git = github3.GitHub()
for i in itertools.chain(git.all_repositories(), git.repositories(type='private')):
do things
我发现GitHub使用请求向github api发出请求。https://github.com/sigmavirus24/github3.py/blob/3e251f2a066df3c8da7ce0b56d24befcf5eb2d4b/github3/models.py#L233
但是我无法弄清楚我应该传递什么参数或我应该更改什么 atribute 以在请求之间设置一些延迟。
你能告诉我一些建议吗?
github3.py 目前没有选项可以在请求之间强制延迟。也就是说,有一种方法可以获取请求元数据,其中包括您在速率限制中剩余的请求数以及该速率限制应重置的时间。我建议你使用git.rate_limit()['resources']['core']
来确定你应该在自己的循环中为自己设置哪些延迟。
当我预计超过查询限制时,我使用以下函数:
def wait_for_karma(gh, min_karma=25, msg=None):
while gh:
core = gh.rate_limit()['resources']['core']
if core['remaining'] < min_karma:
now = time.time()
nap = max(core['reset'] - now, 0.1)
logger.info("napping for %s seconds", nap)
if msg:
logger.info(msg)
time.sleep(nap)
else:
break
我会在进行我认为"大"的调用之前调用它(即可能需要多个 API 调用才能满足(。根据您的代码示例,您可能希望在循环的底部执行此操作:
git = github3.GitHub()
for i in itertools.chain(git.all_repositories(), git.repositories(type='private')):
do_things()
wait_for_karma(git, msg="pausing")