python - 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() 的执行
解决方案
我建议您通过“等待响应”消息从您的机器人发送同步响应。您可以按照Narendra的建议generateresponse()
创建一个线程来运行,这样当它返回时,它会向聊天室发送一个异步消息,并提供所需的结果。请参阅GitHub 上来自 Google 的这个 Flask 异步示例——它没有线程,但确实向您展示了如何(使用服务帐户)将异步消息发布到聊天室。runapi()
推荐阅读
- javascript - 如果数据设置为假值(null、false、未定义等),为什么 v-bind:style 不会对更改做出反应
- javascript - css square限制大小和位置到父div
- flutter - 如何更改颤动中的文本选择选项?
- python - 使用 selenium 截屏时如何关闭网站弹出窗口?
- r - 使用 PCA 结果作为 XGboost 模型的输入引发错误:存储在 `object` 和 `newdata` 中的特征名称不同
- php - 用于将子目录中的所有请求重定向到该子目录的索引的 Mod_rewrite 规则,路径为变量
- xml - 使用“或”运算符和函数创建简单的 xpath 表达式
- angular - 通过 JHipster 中的 id 字段的不同字段实现新的过滤器操作
- python - 来自 CMD 或 .bat 文件执行但不是来自 IDE 的 Google_api 凭据错误
- python - 在 docker 容器中运行时 Python 中的 SFTP 密钥错误