私はmyanimelist.net API(sample)からユーザーのXMLを取得して処理し、いくつかのデータを返すFlaskアプリケーションを開発中です。返されるデータは、ユーザーが表示しているFlaskページによって異なる場合がありますが、各リクエストが常に同じ前に行われる最初のプロセス(XMLの取得、Userオブジェクトの作成など)は異なります。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