Я использовал API Google Vision для выполнения задач OCR в некоторых документах с использованием Python.Как избежать кода ошибки Http 429 от API Google Vision?
Он начинает работать отлично, пока я не получу код ошибки Http 429, что означает, что я делаю слишком много запросов за короткий промежуток времени. Затем я решил поспать между каждым запросом, время которого увеличивается по мере увеличения количества Http Error Code 429. Однако через некоторое время сообщение об ошибке продолжает поступать. Поскольку сообщения продолжают поступать, время сна продолжает расти, пока оно не достигнет точки, в которой он спит так долго, что я теряю связь.
Самое странное, что если я получаю такое сообщение об ошибке много раз подряд и немедленно завершаю процесс и запускаю его снова, запросы начинают работать снова с первой попытки.
Другими словами, кажется, что, независимо от времени сна, я начинаю получать такие сообщения в какой-то момент, и единственный способ вернуть его снова - это перезапустить процесс (который вообще не вызывает чувства).
Как избежать такого сообщения об ошибке без перезапуска процесса? Может кто-нибудь мне помочь?
Большое спасибо!
EDIT:
Это код запроса (часть его).
from apiclient import discovery
from oauth2client.client import GoogleCredentials
# The other imports are omitted
DISCOVERY_URL = 'https://{api}.googleapis.com/$discovery/rest?version={apiVersion}' # noqa
credentials = GoogleCredentials.get_application_default()
self.vision = discovery.build(
'vision', 'v1', credentials=credentials,
discoveryServiceUrl=DISCOVERY_URL)
batch_request = []
for image in images:
batch_request.append({
'image': {
'content': base64.b64encode(image).decode('UTF-8')
},
'features': [{
'type': 'TEXT_DETECTION',
}]
})
request = self.vision.images().annotate(
body={'requests': batch_request})
Есть ли заголовок 'Retry-After', так что вы знаете, когда нужно сделать следующий запрос? – jonrsharpe
@jonrsharpe спасибо за ваш быстрый ответ. я попытался получить информацию заголовка, но кажется, что запрос сделан полностью внутри метода из API, который я использую.Поэтому у меня нет доступа к любому ответу и заголовку, когда он приходит с ошибкой. API просто бросает исключение (в данном случае HttpError). К сожалению, я не мог найти ничего в сообщении об исключении, которое могло бы помочь. Это вызов: request = self.vision.images(). Annotate (body = {'requests': batch_request}) –
Какую библиотеку вы используете? Иногда ошибка будет иметь больше информации, если вы поймаете и осмотрите ее: 'urlib2'' HttpError', например, содержит 'info',' message', 'reason' и т. Д. –