0

我正在使用 python github3 模块,我需要设置对 github api 的请求之间的延迟,因为我的应用程序在服务器上产生了很多负载。

我正在做诸如

git = github3.GitHub()
for i in itertools.chain(git.all_repositories(), git.repositories(type='private')):
    do things

我发现 GitHub 使用 requests 向 github api 发出请求。 https://github.com/sigmavirus24/github3.py/blob/3e251f2a066df3c8da7ce0b56d24befcf5eb2d4b/github3/models.py#L233

但是我不知道我应该传递什么参数或者我应该改变什么属性来设置请求之间的一些延迟。

你能给我一些建议吗?

4

2 回答 2

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

我会在进行我认为“大”的调用之前调用它(即可能需要多个 API 调用才能满足)。根据您的代码示例,您可能希望在循环底部执行此操作:

git = github3.GitHub()
for i in itertools.chain(git.all_repositories(), git.repositories(type='private')):
    do_things()
    wait_for_karma(git, msg="pausing")
于 2017-05-26T01:02:20.360 回答
0

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

于 2017-05-20T14:16:56.743 回答