Задержка между запросами с использованием github3 в python

Я использую модуль 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

Но я не могу понять, какой параметр я должен передать или какой атрибут я должен изменить, чтобы установить некоторую задержку между запросами.

Можете мне что-нибудь посоветовать?

2 ответа

Я использую следующую функцию, когда ожидаю превышения лимита моего запроса:

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")

github3.py в настоящее время не имеет опций для принудительной задержки между запросами. Тем не менее, есть способ получить метаданные запроса, которые включают количество запросов, которые вы оставили в вашем ограничении скорости, а также когда этот предел ограничения должен быть сброшен. Я предлагаю вам использовать git.rate_limit()['resources']['core'] чтобы определить, какие задержки вы должны установить для себя в вашем собственном цикле.

Другие вопросы по тегам