我正在開發一個Flask應用程序,它從myanimelist.net API(sample)中檢索用戶的XML,對其進行處理並返回一些數據。返回的數據可能會有所不同,具體取決於用戶正在查看的Flask頁面,但在每個請求之前完成的初始過程(檢索XML,創建用戶對象等)始終是相同的。我可以在Flask請求中持久保存http連接(或其他數據)嗎?
目前,從myanimelist.net檢索XML是我應用程序性能的瓶頸,併爲每個請求增加了500-1000ms。由於應用程序的所有請求都是針對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()
那麼,有沒有辦法像我提到的堅持有什麼聯繫?請讓我知道,如果我從正確的方向接近這一點。
爲什麼不把你的get_xml與任務處理程序一起分發,這個任務處理程序會在後臺運行這個進程,例如Celery? – glls
那不會像緩存一樣返回陳舊的結果嗎?這是不可避免的? – Noah