我正在使用Flask应用程序,该应用程序从myanimelist.net API(sample)检索用户的XML,对其进行处理并返回一些数据。返回的数据可能会有所不同,具体取决于用户正在查看的Flask页面,但在每个请求始终相同之前完成的初始过程(检索XML,创建用户对象等)。
目前,从myanimelist.net检索XML是我应用程序性能的瓶颈,并为每个请求增加了500-1000毫秒的好处。由于所有应用程序的请求都发送到myanimelist服务器,因此我想知道是否有一种方法可以保持http连接,以便在第一次请求发出后,后续请求将不会只要加载。我不想缓存整个XML,因为数据经常变化。
以下是我的应用的总体概述:
from flask import Flask
from functools import wraps
import requests
app = Flask(__name__)
def get_xml(f):
@wraps(f)
def wrap():
# Get the XML before each app function
r = requests.get('page_from_MAL') # Current bottleneck
user = User(data_from_r) # User object
response = f(user)
return response
return wrap
@app.route('/one')
@get_xml
def page_one(user_object):
return 'some data from user_object'
@app.route('/two')
@get_xml
def page_two(user_object):
return 'some other data from user_object'
if __name__ == '__main__':
app.run()
那么有没有办法像我提到的那样坚持连接?如果我从正确的方向接近这个,请告诉我。
答案 0 :(得分:0)
我认为你并没有从正确的方向接近这个问题,因为你将你的应用程序作为myanimelist.net的代理而过多。
拥有2000名用户时会发生什么?您的应用程序最终会向myanimelist.net提出大量请求,而且一个普通用户肯定可以使用您的应用程序(或将其用于DoS myanimelist.net)。
这是一个更清洁的方式恕我直言:
服务器端:
我怀疑你能做得更好,假设myanimelist.net没有提供"推送" API。