在Celery任务中调用Google Cloud API永远不会返回

时间:2018-08-22 10:09:39

标签: python flask google-cloud-platform celery

我正在尝试拨打外部53 | SSRS44 | Active | 2018-08-20 10:10:10 53 | SSRS44 | Consumed | 2018-08-20 10:10:10 53 | SSRS44 | Consumed | 2018-08-20 10:10:10 Google Cloud Natural Language API任务(使用Celery包)中获取。问题在于对API的调用永远不会返回(挂起):

google-cloud-python

我试图解决的问题:

  • 从脚本中调用方法@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 。效果很好。
  • 在API调用中添加了get_entities()timeout=1。它仍然挂起。
  • 改为使用retry=False模块调用API。芹菜可以很好地工作,因此问题必须出在requests内。

关于如何调试或解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

由于问题似乎出在LanguageServiceClient中,所以我使用requests模块来调用celery工作器中的API:

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())