程序非常简单,递归地下降到目录并提取元素。目录是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
答案 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))