使用多个API处理异步请求-Python Flask Redis

使用多个API处理异步请求-Python Flask Redis,python,api,asynchronous,redis,Python,Api,Asynchronous,Redis,我正在开发一个应用程序,该应用程序必须查阅多个API以获取信息,并在处理数据后将答案输出到客户端。客户端使用浏览器连接到web服务器以转发请求,之后,web服务器将从多个API中查找所需的信息,并在加入来自这些API的响应后,向客户端提供答案 web服务器是使用Flask构建的,还实现了一个模块(Python),该模块提取每个API所需的信息。由于每个API的咨询过程都需要时间,因此我希望给web服务器一个响应超时时间,因此,在发送请求之后,只使用低于时间缓冲区的请求 我建议的解决方案: 使用R

我正在开发一个应用程序,该应用程序必须查阅多个API以获取信息,并在处理数据后将答案输出到客户端。客户端使用浏览器连接到web服务器以转发请求,之后,web服务器将从多个API中查找所需的信息,并在加入来自这些API的响应后,向客户端提供答案

web服务器是使用Flask构建的,还实现了一个模块(Python),该模块提取每个API所需的信息。由于每个API的咨询过程都需要时间,因此我希望给web服务器一个响应超时时间,因此,在发送请求之后,只使用低于时间缓冲区的请求

我建议的解决方案: 使用Redis队列和RQ worker将每个API的请求排队,并将响应存储在队列中,然后等待超时并收集能够在允许时间内响应的响应。然后,处理信息并向用户给出响应

flask web服务器的设置如下:

@app.route('/result',methods=["POST"])
def show_result():

inputText = request.form["question"]

tweetModule = Twitter()
tweeterResponse = tweetModule.ask(params=inputText)

redditObject = RedditModule()
redditResponse = redditObject.ask(params=inputText)    

edmunds = Edmunds()
edmundsJson = edmunds.ask(params=inputText)

# More APIs could be consulted here

# Send each request async and the synchronize the responses from the queue

template = env.get_template('templates/result.html')
return render_template(template,resp=resp)
工人:

conn = redis.from_url(redis_url)

if __name__ == '__main__':
    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()
假设每个模块处理自己的排队过程

我可以预见未来的一些问题:

  • 存储在队列上的未到达超时的信息会发生什么变化
  • 如何让Flask等待,然后从队列中提取响应
  • 如果两个客户在同一时间段内询问,信息是否可能会混淆
  • 有没有更好的方法来处理异步请求,然后同步响应
谢谢