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

我正在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))
       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()的执行。