2016-01-14 36 views
8

私はウェブ開発に新しいことを指摘してこの質問を開始します。フラスコがメモリを解放していない

ここまでです:私は最近、Flaskという小さなアプリケーションを構築し、データをロードしてbokehを使用してその視覚化を出力しました。それで、メモリにかなりの量のデータを保存する必要があります(約10-20 MB)。これは実際には問題ではありませんが、ビュー関数が要求を送信した後にアプリケーションがメモリ内のオブジェクトを解放しません。つまり、ちょうど少数の使用の後で、アプリはメモリの大部分を使い果たしたでしょう。

質問:ビュー機能がリクエストを返した後に、Flaskが使用済みのオブジェクトを強制的に解放するにはどうすればよいですか?あるいは、私はこの問題について誤ったやり方をしていますか?私がまだプロトタイピングしかしていないので、Flaskの組み込みサーバーを使用することに言及する価値はあります。 ¨ おかげで、Tingis

EDITは、ここに私のビュー機能の一つです。何それがないと、それはSQLAlchemyを使用してDBからデータをロードした後(例えば、カーネル密度推定値および累積リターンを計算するように)いくつかの時系列の操作を行い、で終わる変数はbokeh図形の接合divscript文字列を出力することです_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解放される。

+0

メモリを保持している理由を知るには、コードの少なくとも1つのセクションを参照する必要があります。 –

+0

もちろん、問題は私が本日退職したことだけです。私は明日あなたに戻ることができますか? – Tingiskhan

+0

@DanielCasserly上記のコードはあなたを助けますか、それとももっと必要としますか? – Tingiskhan

答えて

0

get_sessionとCompanyオブジェクトの間で循環参照を作成することはできますか?

関連する問題