Python / lxml占用了太多内存

时间:2015-09-21 10:04:36

标签: python optimization memory-leaks lxml

程序非常简单,递归地下降到目录并提取元素。目录是1k,大约200个文件是0.5m。 我发现它在一段时间后消耗了大约2.5g的内存,这是完全不可接受的,脚本并不是唯一能吃掉所有东西的。我无法理解它为什么不释放内存。明确的del没有帮助。 有什么技巧可以考虑吗?


from lxml import etree
import os

res=set()
for root, dirs, files in os.walk(basedir):
    for i in files:
        tree = etree.parse(os.path.join(root,i), parser)
        for i in tree.xpath("//a[@class='ctitle']/@href"):
            res.add(i)
        del tree

1 个答案:

答案 0 :(得分:1)

您要保留对树中元素_ElementUnicodeResult的引用。该元素保留对其父级的引用。这可以防止整棵树被垃圾收集。

尝试将元素转换为字符串并存储:

from lxml import etree
import os

titles = set()
for root, dirs, files in os.walk(basedir):
    for filename in files:
        tree = etree.parse(os.path.join(root, filename), parser)
        for title in tree.xpath("//a[@class='ctitle']/@href"):
            titles.add(str(title))