私はウェブ開発に新しいことを指摘してこの質問を開始します。フラスコがメモリを解放していない
ここまでです:私は最近、Flask
という小さなアプリケーションを構築し、データをロードしてbokeh
を使用してその視覚化を出力しました。それで、メモリにかなりの量のデータを保存する必要があります(約10-20 MB)。これは実際には問題ではありませんが、ビュー関数が要求を送信した後にアプリケーションがメモリ内のオブジェクトを解放しません。つまり、ちょうど少数の使用の後で、アプリはメモリの大部分を使い果たしたでしょう。
質問:ビュー機能がリクエストを返した後に、Flask
が使用済みのオブジェクトを強制的に解放するにはどうすればよいですか?あるいは、私はこの問題について誤ったやり方をしていますか?私がまだプロトタイピングしかしていないので、Flask
の組み込みサーバーを使用することに言及する価値はあります。 ¨ おかげで、Tingis
EDITは、ここに私のビュー機能の一つです。何それがないと、それはSQLAlchemy
を使用してDBからデータをロードした後(例えば、カーネル密度推定値および累積リターンを計算するように)いくつかの時系列の操作を行い、で終わる変数はbokeh
図形の接合div
とscript
文字列を出力することです_plt
。
from app import app
from app.business_logic.classes.interface_classes import Company
from app.business_logic.functions.functions import get_session
@app.route('/analysis_tool/company_performance', methods=['GET', 'POST'])
def analysis_tool__company_performance():
session = get_session()
companies_to_analyse = {
'Company A': {'ts_to_use': 'Returns of Company A'},
'Company B': {'ts_to_use': 'Returns of Company B'}
}
chosen_company = request.form.get('security')
types_of_plots = {}
if chosen_company is not None:
company = Company(session, chosen_company)
company.load_company()
company.load_timeseries(companies_to_analyse[chosen_platform]['ts_to_use'])
company.unpack_observations_of_ts_as_df()
ret_df = company.manipulate_dataframe('convert timeseries to returns',
frequency='monthly',
ts_type=company.loaded_ts_orm_obj.ts_type_name)
cum_ret_df = company.manipulate_dataframe('calculate cumulative return', df=ret_df)
cum_ret_plt = company.plot_dataframe(cum_ret_df, legend=False)
kde_plt = company.plot_kde(ret_df)
types_of_plots = {'Cumulative_return': cum_ret_plt, 'KDE': kde_plt}
return render_template('plotting/plot_using_panels.html',
items=sort_dictionary(platforms_to_analyse),
plot_types=sort_dictionary(types_of_plots),
selected=chosen_company)
これは役に立ちますか?
EDIT 2「私は描画インタフェースへの各呼び出し、ならびに機能
@app.teardown_request
def teardown_request(exception):
gc.collect()
後gc.collect()
を添加することにより、以下questionに設けられた溶液を試みたが、メモリがまだにISN解放される。
メモリを保持している理由を知るには、コードの少なくとも1つのセクションを参照する必要があります。 –
もちろん、問題は私が本日退職したことだけです。私は明日あなたに戻ることができますか? – Tingiskhan
@DanielCasserly上記のコードはあなたを助けますか、それとももっと必要としますか? – Tingiskhan