我将从这个问题开始,指出我对Web开发很新.
现在到了这一点:我最近构建了一个相当小的Flask应用程序,它可以加载数据然后使用它输出它的可视化bokeh.因此,它必须将大量数据存储在内存中(大约10-20 mb).这本身并不是一个真正的问题,但是,在视图函数发送请求后,应用程序不会释放内存中的对象.这意味着只需几次使用后,应用程序就会耗尽大部分内存.
因此,我的问题是:Flask在视图函数返回任何请求后,如何强制释放已使用的对象?或者我是以错误的方式解决这个问题?值得一提的是,我使用内置服务器,Flask因为我们仍然只是原型.¨谢谢,Tingis
编辑这是我的一个视图功能.它的作用是它使用db加载数据SQLAlchemy,然后进行一些时间序列操作(例如内核密度估计和计算累积回报),并输出一个连接div和script一个bokeh数字字符串,它们是以_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)
Run Code Online (Sandbox Code Playgroud)
这有帮助吗?
编辑2我尝试了以下问题中提供的解决方案,通过gc.collect()在每次调用绘图界面后添加一个,以及函数
@app.teardown_request
def teardown_request(exception):
gc.collect()
Run Code Online (Sandbox Code Playgroud)
但记忆仍未释放.
| 归档时间: |
|
| 查看次数: |
3915 次 |
| 最近记录: |