Задача вызова Google Cloud API в Celery никогда не возвращается
Я пытаюсь позвонить на внешний Google Cloud Natural Language API
изнутри Celery
задача (используя google-cloud-python
пакет). Проблема в том, что вызов API никогда не возвращается (зависает):
@celery.task()
def get_entities_async():
return get_entities()
def get_entities():
gcloud_client = LanguageServiceClient()
doc = types.Document(content='This is a test.', language='en', type='PLAIN_TEXT')
res = gcloud_client.analyze_entities(document=doc) # This call never returns
print('Call successful!') # (This never gets printed)
return res
Что я пытался решить проблему:
- Вызов метода
get_entities()
из скрипта. Это отлично работает. - Добавил
timeout=1
а такжеretry=False
на вызов API. Это все еще висит. - Вызывается API с помощью
requests
модуль вместо Это хорошо работает с сельдереем, поэтому проблема должна быть что-то внутриLanguageServiceClient
,
Любые идеи о том, как отладить или решить эту проблему?
1 ответ
Поскольку проблема, кажется, в LanguageServiceClient
Я использовал requests
модуль вместо вызова API внутри celery
работник:
import requests
# Temporary solution to call the Natural Language API
def get_entities():
doc = {'type': 1, 'language': 'en', 'content': 'This is a test.'}
d = {'document': doc, 'encodingType': 'UTF32'}
url = 'https://language.googleapis.com/v1beta2/documents:analyzeEntities?key=' + API_KEY
return requests.post(url, json=d, timeout=10.0).json())