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

2024-10-04 07:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是pythongithub3模块,我需要设置请求到githubapi之间的延迟,因为我的应用程序会给服务器带来很大的负载。在

我在做一些事情,比如

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

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

你能给我点建议吗?在


Tags: 模块inpygitgithub服务器应用程序chain
2条回答

github3.py目前没有强制请求之间延迟的选项。也就是说,有一种方法可以获取请求元数据,其中包括您在ratelimit中留下的请求数量以及ratelimit应该何时重置。我建议您使用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调用才能满足)。根据代码示例,您可能希望在循环的底部执行以下操作:

^{pr2}$

相关问题 更多 >