Задача вызова 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())
Другие вопросы по тегам