在python中使用github3的请求之间的延迟

时间:2017-05-18 15:44:35

标签: python python-requests github3.py

我正在使用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

但是我无法弄清楚我应该传递什么参数或我应该更改哪些属性以在请求之间设置一些延迟。

你能告诉我什么吗?

2 个答案:

答案 0 :(得分:0)

github3.py目前没有选项可以强制执行请求之间的延迟。也就是说,有一种方法可以获取请求元数据,其中包括您在ratelimit中留下的请求数以及该速率限制应该重置的时间。我建议您使用git.rate_limit()['resources']['core']来确定您应该在自己的循环中为自己设置的延迟。

答案 1 :(得分:0)

当我希望超出查询限制时,我会使用以下函数:

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

我打电话之前打电话,我相信是#34;大&#34; (即可能需要多个API调用才能满足)。根据您的代码示例,您可能希望在循环的底部执行此操作:

git = github3.GitHub()
for i in itertools.chain(git.all_repositories(), git.repositories(type='private')):
    do_things()
    wait_for_karma(git, msg="pausing")