为了账号安全,请及时绑定邮箱和手机立即绑定

在什么情况下,看起来像python内存泄漏的问题可能不是泄漏?

在什么情况下,看起来像python内存泄漏的问题可能不是泄漏?

茅侃侃 2022-08-16 10:16:09
我们有一个使用PyXB和其他库的python脚本,该脚本处理大量XML和JSON数据,并且该脚本消耗的RAM量不断增加,直到机器内存耗尽。除了内存泄漏之外,是否还有其他情况可能导致这种高内存使用率?
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

在我们的例子中,看起来像泄漏的原因是我们的python代码消耗RAM的速度比python垃圾回收器愿意清理垃圾的速度快。


在我们的例子中,解决方案是在脚本中每个工作单元结束时强制进行手动垃圾回收,如下所示:


gc.collect()

这让内存得到了控制。


证明似乎正在泄漏的特定代码没有泄漏,并通过 tracemalloc 库进行了确认。收集垃圾,拍摄快照,然后比较前后快照,以证明没有分配额外的内存。


for _ in range(10000):


    gc.collect();

    snapshot1 = tracemalloc.take_snapshot()


    response = test_parsing("assets.xml")

    del response


    gc.collect();

    snapshot2 = tracemalloc.take_snapshot()


    top_stats = snapshot2.compare_to(snapshot1, 'lineno')

    print("[ Non Zero differences ]")

    for stat in top_stats:

        if (stat.size_diff != 0):

            print(stat)

在我们的例子中,上面的非零差异列表在每次迭代后都是空的,证明没有泄漏。


查看完整回答
反对 回复 2022-08-16
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信