所以這是我也必須處理的。就我而言,情況更糟,我的MB可以達到100 MB或更多。
我的第一個問題是:
這些問題的答案真的提出了不同的方法來處理它。
假設你在一堆請求中只需要一大堆東西,而且對每個人都是一樣的,而且你知道你很快就會需要它 - 我會在應用程序啓動並保持時加載它它在內存中或在第一次請求時延遲加載(然後將其保存在內存中)。
另一種方法是將沉重的數據位分成它自己的燒瓶應用程序。
# api.py: your api flask application
from flask import Flask, jsonify, request
api_app = Flask(__name__)
big_gis_object = unpickle(...)
@api_app.route('/find_distance')
def find_distance():
# grabbing the parameters for this request
lat, lon = request.args['lat'], request.args['lon']
# do your normal geo calculations here
distance = big_gis_object.do_dist_calcs(lat, lon)
# return the result as json to make things easy
return jsonify(distance=distance)
# app.py: your main flask application
import requests
from flask import Flask, render_template
main_app = Flask(__name__)
@main_app.route('/')
def homepage():
# this is how you ask the geo api app to do something for you
# note that we're using the requests library do make it easier
# - http://docs.python-requests.org/en/latest/user/quickstart/
resp = requests.get('http://url_to_flask_app/find_distance', params=dict(lat=1.5, lon=1.7))
distance = resp.json()['distance']
return render_template('homepage.html', distance)
那麼你如何提供這些將取決於負載/要求。雖然它很靈活。例如,你可以擁有40個主進程的進程,並且只有1個進程(儘管它一次只能做一件事)。如果您需要更多的API進程,只需調整它直到您擁有合適的平衡點。權衡是api流程需要更多的內存。
這一切都有意義嗎?
Hi @AidanKane,謝謝!我們會不時更新數據,不時取消,每月一次;它是地理空間數據,公共交通數據......這種東西,每個人都是一樣的。現在它只是一個大約10MB的文件。所以我只是加載它作爲一個全局變量? – Daniel
在這種情況下,我可能會。這會影響記憶。所以,這取決於你將運行多少個進程(取決於負載),因爲每個進程都有一個數據副本。另一種方法是實際將加載的數據移動到一個單獨的帶有api訪問權限的應用程序中。這樣,您可以根據需要獲得儘可能多的內存飢餓進程,並且爲前端提供完全獨立的應用程序。 –
全局變量方法 - 或者真的,在你的情況下是不變的,所以我們可以更好地瞭解:-) - 實現起來非常簡單,我會從那裏開始。如果不瞭解加載/訪問模式以及未對代碼進行分析,那麼很難說您何時需要繼續下一步(更復雜)的步驟。 –