【发布时间】:2020-06-27 11:31:48
【问题描述】:
我正在通过流式处理大型 http 响应内容(100 万条记录)。 从请求中读取 10000 个元素后,我正在调用一个方法将它们插入数据库,然后继续处理响应。我注意到 RAM 使用量在不断增加。 下面是示例代码。如果我评论 db.session.add() 部分尝试将数据添加到临时列表,则不会发生内存泄漏。那么 SQLAlchemy 在插入数据库后没有正确释放内存?请提出建议。
示例代码。
for chunk in response.iter_content(2048):
#decode chunk
xyz_json_list = list()
xyz_json = json.loads(chunk_string)
xyz_json_list.append(xyz_json)
if len(xyz_json_list) == 10000:
add_elements_to_db(xyz_json_list)
xyz_json_list = list()
...
func add_elements_to_db(xyz_list):
for xyz in xyz_list:
db.sesssion.add(create_object_from_json(xyz))
db.session.commit()
db.session.expunge_all()
del xyz_list
gc.collect()
每次调用 add_elements_to_db 后,内存呈指数增长。
【问题讨论】:
标签: python flask flask-sqlalchemy