Python API调用的响应时间太长。如何从该函数传递控件,然后稍后再返回
我正在python flask web服务器中创建一个聊天机器人。我有一个函数,它将查询发送到api,并回复到聊天机器人Python API调用的响应时间太长。如何从该函数传递控件,然后稍后再返回,python,asynchronous,flask,hangouts-chat,Python,Asynchronous,Flask,Hangouts Chat,我正在python flask web服务器中创建一个聊天机器人。我有一个函数,它将查询发送到api,并回复到聊天机器人 def generateresponse(command): #do something text = runapi(uri) return text def runapi(uri): r = requests.get(uri, auth=HTTPBasicAuth(user, password))
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,直到它返回输出。我该怎么做?我不想阻止回应。我只希望generateresponse()能够在30秒之前返回“waiting”消息,而不暂停runapi()的执行。据我所知,您可以在某个时间点后使用 请参见此示例:
from threading import Timer
set_time = 1
event = Timer(set_time, hello)
def message():
t.cancel()
return "Waiting for the response"
def api():
event.start()
r = requests.get("http://www.satp.org/Timelines.aspx?countries=bangladesh")
t.cancel()
print("finish")
return r
api()
但是,您不能先返回一些初始消息,一旦得到响应,就不可能返回输出 我建议您通过带有“等待响应”消息的
generatereresponse()
从bot发送同步响应。您可以按照建议创建一个线程来运行runapi()
,这样当它返回时,它会向聊天室发送一条异步消息,并显示所需的结果。请参见GitHub上的内容——它没有线程,但向您展示了如何(使用服务帐户)将异步消息发布到聊天室。我不想阻止响应进入。我只希望generateresponse()能够在30秒之前返回“waiting”消息,而不暂停runapi()的执行。