Python在解析XML之后不会释放内存

2024-06-09 18:48:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用lxml来解析一些相当大的xml文件(每个文件大约15MB)。 我在概念上是这样做的:

import lxml.etree as ET
def process_xmls():
    for xml_file in xml_files:
        tree=ET.parse(xml_file)
        etc. etc. 

现在,我调用函数,我看到内存在不断增加,这是合理的。 问题是,在函数结束之后,内存仍然很高,Python不会释放它! 为什么会这样?有什么变通办法吗?在


Tags: 文件inimport概念fordefasetc
1条回答
网友
1楼 · 发布于 2024-06-09 18:48:53

可能是lxml调用了malloc(),后者调用了sbrk()。虚拟内存永远不会变小。在

但这并不是世界末日。ps-VSZ可能永远不会收缩,但是在其他进程的内存压力下,RSS应该随着分页而收缩。根据应用程序的活动模式(您从未描述过),这些“冷”页面可能永远不会被引用,因此,尽管VSZ很大,但您的长生命周期的python进程最终会占用较小的内存。在

如果你的应用程序可以运行24小时,有时读取15个MiB文件,内存数稳定,那么它就不会泄漏。第一次文件读取将膨胀内存数字,但只要随后的文件读取不会导致单调地增加内存消耗,您应该处于良好的状态。在

如果您对占用空间感到非常不安,请考虑告诉您的长寿命应用程序使用multiprocessing来分离短生命的解析器进程。它们将调用sbrk()、sbrk()、sbrk(),然后exit(),所有资源都将立即被回收。在

相关问题 更多 >