首页 > 解决方案 > API 调用响应时间过长。如何通过此功能传递控制权并稍后再回来

问题描述

我正在 python 烧瓶网络服务器中创建一个聊天机器人。我有这个功能可以向 api 发送查询并回复聊天机器人。

     def generateresponse(command):
       #do something
       text = runapi(uri) 
       return text

    def runapi(uri):
       r = requests.get(uri, auth=HTTPBasicAuth(user, password))
       parsed = js.loads(r.text,object_pairs_hook=OrderedDict)
       return parsed

   def on_event():
       event = request.get_json()  #receives an event from the chatbot
       #do something
       resp = generateresponse(event)
       apiasyncresp(resp, spaceName)
       return json.jsonify()

这个 runapi 方法调用了一个 mulesoft api 来返回结果。但是,对某些查询作出响应需要更长的时间。我想将文本 - “等待响应”返回给聊天机器人(如果我在 30 秒内没有从 runapi() 得到任何响应)并继续执行 runapi 直到它返回输出。我该怎么做?
我不想阻止响应进来。我只希望在 30 秒之前 generateresponse() 可以返回“等待”消息而不暂停 runapi() 的执行

标签: pythonasynchronousflaskhangouts-chat

解决方案


我建议您通过“等待响应”消息从您的机器人发送同步响应。您可以按照Narendra的建议generateresponse()创建一个线程来运行,这样当它返回时,它会向聊天室发送一个异步消息,并提供所需的结果。请参阅GitHub 上来自 Google 的这个 Flask 异步示例——它没有线程,但确实向您展示了如何(使用服务帐户)将异步消息发布到聊天室。runapi()


推荐阅读