Управление лимитом ставок в Доме компаний с библиотекой - PullRequest
0 голосов
/ 05 июня 2019

Я работаю с домом компаний API , чтобы извлечь несколько тысяч профилей компаний .

Нормальный предел скорости составляет 600/5 минут, но может быть увеличен до 1200/5 минут. Я использовал этот скрипт на прошлой неделе, и он работал нормально в течение нескольких часов, теперь я получаю сообщение об ошибке 429.

Я думаю, что сценарий в порядке, но я могу что-то упустить с декораторами из библиотек ratelimit и backoff, возможно, кто-то более знаком с этими библиотеками и видит логическую ошибку, которую я не вижу.

# api_funcs.py module

import requests
from requests import ConnectionError
from ratelimit import limits, sleep_and_retry
from backoff import on_exception, expo
from pipeline_tools.helpers import get_key    

KEY = get_key("API_key")

FIVE_MINUTES = 300  # Number of seconds in five minutes.


@sleep_and_retry  # if we exceed the ratelimit imposed by @limits forces sleep until we can start again.
@on_exception(expo, ConnectionError, max_tries=5)
@limits(calls=1200, period=FIVE_MINUTES)
def call_api(url, api_key):

    r = requests.get(url, auth=(api_key, ""))

    if not (r.status_code == 200 or r.status_code == 404):
        r.raise_for_status()

    elif r.status_code == 404:
        return dict({"error": "not found"})

    else:
        return r.json()

def company_basic_search(comp_code):
    return call_api(url=API_BASE_URL+"/company/"+comp_code, api_key=KEY)

# [list of 200,000 company codes]
comp_codes = ['XXX1','XXX2','XXX3'] 

for code in comp_codes:
    basic_profile_resource = company_basic_search(comp_code=code)
    # if-elif-else flow inserting the object in error table if 404 or in other table if 200. 

Я продолжаю получать

raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 429 Client Error: Too Many Requests for url: ...

Что-то не так с моей логикой или это, вероятно, на стороне API?

1 Ответ

0 голосов
/ 10 июня 2019

Код работает нормально - это была проблема на стороне сервера CH, фактический лимит которого был ниже, чем тот, который указан в документации.

...