Python 烧瓶+;uwsgi&x2B;nginx:什么时候释放内存?
我正在用烧瓶构建API 例如,如果我有这样一条烧瓶路线:Python 烧瓶+;uwsgi&x2B;nginx:什么时候释放内存?,python,nginx,flask,uwsgi,flask-sqlalchemy,Python,Nginx,Flask,Uwsgi,Flask Sqlalchemy,我正在用烧瓶构建API 例如,如果我有这样一条烧瓶路线: @app.route('/api/tasks', methods=['GET']) @auth.login_required def tasks(): tasks = g.user.tasks task_list = [] for t in tasks: d = {} d['name'] = t.name d['id'] = t.id task_lis
@app.route('/api/tasks', methods=['GET'])
@auth.login_required
def tasks():
tasks = g.user.tasks
task_list = []
for t in tasks:
d = {}
d['name'] = t.name
d['id'] = t.id
task_list.append(d)
return jsonify({'tasks':task_list})
返回响应后,变量“tasks”和“task_list”使用的内存是否会立即释放
在我的例子中,uwsgi进程似乎没有释放它们用于每个请求的内存,至少在每次返回之后似乎没有这样做
通过使用Flask SQLAlchemy扩展从MySQL数据库检索任务
谢谢
编辑:
这是我的uwsgi配置文件(/etc/flask-uwsgi/flask-uwsgi.ini):
我称之为:
uwsgi --socket 127.0.0.1:8080 -w wsgi:app --ini /etc/flask-uwsgi/flask-uwsgi.ini --stats /tmp/statsock --memory-report
tasks
和task\u list
都是局部变量,当view函数返回时,这些变量将被解除绑定
是否释放其内容的内存取决于是否存在对数据的其他引用或引用。当Python对象的引用计数下降到0时,Python对象将被清除,因此,如果其他任何对象仍然引用此函数之外的对象,那么它们将不会被清除
例如,任务列表
列表对象没有其他引用,将立即清除。该列表包含新的dict
对象(由循环中的d
引用),并且这些对象也没有其他引用,因此将被清除。这些字典包含键的字符串;它们是重复使用的(在本例中,它们是内部的,每个字符串对象只有一个副本),不需要清除
这将留下t.name
和t.id
值,以及g.user.tasks
参考;如果g.user.task
是一个列表对象,则g.user.task
是对该对象的引用,不会被清除。任何t.name
和t.id
值也可以在其他地方引用,并保留。然而,这通常是件好事
uwsgi --socket 127.0.0.1:8080 -w wsgi:app --ini /etc/flask-uwsgi/flask-uwsgi.ini --stats /tmp/statsock --memory-report