1

我正在尝试优化其中一个脚本中的内存消耗并使用memory_profiler模块来跟踪内存消耗。

这是它显示的示例:

 91.3 MiB      0.0 MiB           1           items = Items.query.filter(
106.1 MiB     14.9 MiB           1               Items.instance_id == instance_id,
                                             ).all()
106.1 MiB      0.0 MiB        4116           items_ids = [i.id for i in items]
106.1 MiB      0.0 MiB           1           zipfile.append(
106.1 MiB      0.0 MiB           1               "items.json",
106.1 MiB      0.0 MiB           1               json.dumps(
108.4 MiB      2.3 MiB           1                   ItemDumpSchema(many=True).dump(items)
                                                 )
                                             )
106.9 MiB     -1.5 MiB           1           del items

如您所见,当从数据库中获取元素列表时,内存消耗增加了 14.9MiB。

然后我将这些数据保存到 RAM 中的 zip 存档中,其中的压缩数据又增加了 2.3 MiB 的消耗。

但是当我del items在那之后调用时,内存只释放了 1.5 MiB。

我认为 sqlalchemy 仍然保留对这些对象的引用,因为它们绑定到当前会话,但我不明白如何清除它们。

我试过session.expunge_all ()了,但没有用。我也试过打电话gc.collect(),但也没有用。


SQLAlchemy 版本 1.2.12

Python 3.6 版

4

0 回答 0