Wie bekomme ich das Ergebnis einer langwierigen Google Cloud Speech API-Operation später?

Unten ist ein Snippet, das die Google Cloud Speech API lange laufende Operation anruft, um eine Audiodatei in Text umzuwandeln

from google.cloud import speech speech_client = speech.Client() audio_sample = speech_client.sample( content=None, source_uri=gcs_uri, encoding='FLAC', sample_rate_hertz=44100) operation = audio_sample.long_running_recognize('en-US') retry_count = 100 while retry_count > 0 and not operation.complete: retry_count -= 1 time.sleep(60) operation.poll() 

Allerdings, da es eine lange laufende Operation ist, könnte es eine Weile dauern und ich idealerweise nicht wollen, um die Sitzung zu halten, während es wartet. Ist es möglich, einige Informationen zu speichern und das Ergebnis später abzurufen?

3 Solutions collect form web for “Wie bekomme ich das Ergebnis einer langwierigen Google Cloud Speech API-Operation später?”

Nein, es gibt keinen Weg, das zu tun. Was Sie tun können, ist das Threading-Modul verwenden, damit es im Hintergrund laufen kann, wie Sie Ihre nächste Aufgabe laufen lassen.

Wie in einer anderen Antwort erwähnt, können Sie einen separaten Thread verwenden, um den Vorgang abzurufen, während der Hauptfaden fortfährt. Alternativ können Sie den operation.name des operation.name des zurückgegebenen Betriebes an einen separaten Dienst übergeben und diese andere Service-Handle-Abfrage haben. In der Praxis kann der Dienst, der den Langlaufbetrieb aufruft, operation.name zu einem Pub / Sub-Thema veröffentlichen.

Unten ist ein möglicher Weg, einen lang laufenden Betrieb abzurufen, indem er ihn nach Namen aufruft:

 from oauth2client.client import GoogleCredentials from googleapiclient import discovery credentials = GoogleCredentials.get_application_default() speech_service = discovery.build('speech', 'v1', credentials=credentials) operation_name = .... # operation.name get_operation_request = speech_service.operations().get(name=operation_name) # response is a dictionary response = get_operation_response.execute() # handle polling retry_count = 100 while retry_count > 0 and not response.get('done', False): retry_count -= 1 time.sleep(60) response = get_operation_response.execute() 

Wenn die Operation beendet ist, könnte die response dict so aussehen wie die folgenden:

 {u'done': True, u'metadata': {u'@type': u'type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata', u'lastUpdateTime': u'2017-06-21T19:38:14.522280Z', u'progressPercent': 100, u'startTime': u'2017-06-21T19:38:13.599009Z'}, u'name': u'...................', u'response': {u'@type': u'type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse', u'results': [{u'alternatives': [{u'confidence': 0.987629, u'transcript': u'how old is the Brooklyn Bridge'}]}]}} 

Nach dem Lesen der Quelle, fand ich, dass GRPC hat eine 10 Minuten Zeitüberschreitung. Wenn Sie eine große Datei einreichen, kann die Transkription 10 Minuten dauern. Der Trick ist, das HTTP-Backend zu verwenden. Das HTTP-Backend pflegt keine Verbindung wie GRPC, sondern jedes Mal, wenn Sie es abfragen, sendet es eine HTTP-Anfrage. Um HTTP zu verwenden,

speech_client = speech.Client(_use_grpc=False)

Python ist die beste Programmiersprache der Welt.