Почему мой поиск по коду GitHub достигает дополнительных ограничений скорости?
Я ищу файлы GitHub, содержащие строку «факел». Поскольку поисковый API ограничивает поиск первыми 100 результатами, я ищу на основе размеров файлов, как предлагается здесь . Тем не менее, я продолжаю достигать предела вторичной скорости. Может ли кто-нибудь предложить, если я делаю что-то неправильно или есть способ оптимизировать мой код, чтобы предотвратить эти ограничения скорости? Я уже ознакомился с передовыми методами работы с ограничениями скорости. Вот мой код -
import os
import requests
import httplink
import time
# This for loop searches for code based on files sizes from 0 to 500000 containing the string "torch"
for i in range(0,500000,250):
print("i = ",i," i + 250 = ", i+250)
url = "https://api.github.com/search/code?q=torch +in:file + language:python+size:"+str(i)+".."+str(i+250)+"&page=1&per_page=10"
headers = {"Authorization": f'Token xxxxxxxxxxxxxxx'} ## Please put your token over here
# Backoff when secondary rate limit is reached
backoff = 256
total = 0
cond = True
# This while loop goes over all pages of results => Pagination
while cond==True:
try:
time.sleep(2)
res = requests.request("GET", url, headers=headers)
res.raise_for_status()
link = httplink.parse_link_header(res.headers["link"])
data = res.json()
for i, item in enumerate(data["items"], start=total):
print(f'[{i}] {item["html_url"]}')
if "next" not in link:
break
total += len(data["items"])
url = link["next"].target
# Except case to catch when secondary rate limit has been reached and prevent the computation from stopping
except requests.exceptions.HTTPError as err:
print("err = ", err)
print("err.response.text = ", err.response.text)
# backoff **= 2
print("backoff = ", backoff)
time.sleep(backoff)
# Except case to catch when the given file size provides no results
except KeyError as error:
print("err = ", error)
# Set cond to False to stop the while loop
cond = False
continue
Судя по этому ответу , это обычное явление. Тем не менее, я надеялся, что кто-то может предложить обходной путь.
Я добавил тег Octokit, хотя и не использую его, чтобы улучшить видимость и поскольку это кажется распространенной проблемой.
Большая часть приведенной выше логики/кода была получена с помощью ответов SO, я высоко ценю всю поддержку со стороны сообщества.
1 ответ
Обратите внимание, что поиск имеет первичное и вторичное ограничение скорости, которое ниже, чем у других. Для JavaScript у нас есть плагин дросселя, который реализует все рекомендуемые лучшие практики. Для поиска мы ограничиваем количество запросов до 1 в 2 секунды . Надеюсь, это поможет!