0

我们有一个使用 PyXB 和其他处理大量 XML 和 JSON 数据的库的 python 脚本,这个脚本消耗越来越多的 RAM,直到机器内存不足。

除了内存泄漏之外,还有其他情况会导致这种高内存使用吗?

4

1 回答 1

0

在我们的案例中,看起来像泄漏的原因是我们的 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)

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

于 2020-03-02T11:19:46.073 回答