J'ai utilisé l'API Google Vision pour effectuer des tâches d'OCR dans certains documents utilisant Python.Comment puis-je éviter le code d'erreur Http 429 de l'API Google Vision?
Il commence à fonctionner parfaitement, jusqu'à ce que je commence à recevoir le code d'erreur Http 429, ce qui signifie que je fais trop de demandes dans un court laps de temps. Ensuite, j'ai décidé de mettre un sommeil entre chaque requête, dont le temps augmente au fur et à mesure que le nombre d'Http Error Code 429 augmente. Cependant, après un certain temps, le message d'erreur continue à venir. Comme les messages continuent d'arriver, le temps de sommeil continue d'augmenter jusqu'à ce qu'il atteigne un point où il dort si longtemps que je perds la connexion. La chose la plus étrange est que si je reçois un tel message d'erreur plusieurs fois de suite et, immédiatement, termine le processus et le redémarre, les requêtes recommencent à fonctionner au premier essai. En d'autres termes, il semble que peu importe le temps de sommeil que je mets, je vais commencer à recevoir de tels messages à un moment donné et la seule façon de le remettre en marche est de redémarrer le processus (qui ne fait aucun sens).
Comment puis-je éviter d'avoir un tel message d'erreur sans avoir à redémarrer le processus? Quelqu'un peut-il m'aider?
Merci beaucoup!
EDIT:
Voici le code de la demande (partie).
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})
Y at-il un en-tête 'Retry-After' qui revient, pour que vous sachiez quand faire la prochaine requête? – jonrsharpe
@jonrsharpe merci pour votre réponse rapide. J'ai essayé d'obtenir les informations d'en-tête, mais il semble que la requête soit entièrement faite dans une méthode de l'API que j'utilise.Par conséquent, je n'ai accès à aucune réponse et en-tête en cas d'erreur. L'API vient de lancer une exception (dans ce cas HttpError). Je n'ai rien trouvé dans le message d'exception qui pourrait aider, malheureusement. C'est l'appel: request = self.vision.images(). Annotate (body = {'requests': batch_request}) –
Quelle bibliothèque utilisez-vous? Parfois une erreur aura plus d'informations disponibles si vous l'attrapez et l'inspectez: 'urttib2'' HttpError', par exemple, contient 'info',' message', 'reason', etc. –