Python/lxml 占用太多内存
Python/lxml is eating too much memory
该程序非常简单,递归地下降到目录并提取一个元素。目录为 1k,大约有 200 个 0.5m 的文件。
我看到它在一段时间后消耗了大约 2.5g 的内存,这是完全不能接受的,脚本不是一个人吃光了所有东西。我不明白为什么它不释放内存。显式删除没有帮助。
有什么技巧可以考虑吗?
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
您正在保留对树中元素的引用,_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))
该程序非常简单,递归地下降到目录并提取一个元素。目录为 1k,大约有 200 个 0.5m 的文件。 我看到它在一段时间后消耗了大约 2.5g 的内存,这是完全不能接受的,脚本不是一个人吃光了所有东西。我不明白为什么它不释放内存。显式删除没有帮助。 有什么技巧可以考虑吗?
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
您正在保留对树中元素的引用,_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))