python 2.7 xml.etree.cElementTree 内存使用
python 2.7 xml.etree.cElementTree memory use
我为我的工作创建了一个小工具,它解析 xml 个文件以查找元素的文本;示例代码:
import xml.etree.cElementTree as Etree
def open_xml():
"""
Retrieves info from the xml file
"""
try:
tree = Etree.parse("xml_file.xml")
text_to_find = tree.findtext(
path=".//ns:some_element",
namespaces={"ns": "http://something.com/something"})
print text_to_find
except IOError:
print "No xml file found."
这是图形用户界面的一部分;我们从不关闭该应用程序,它始终 运行 在专用计算机上。
如果我没理解错的话,python 在内存中创建了一个代表 xml 树的对象。我的问题是:打印完信息后是否需要清除该对象的内存?我担心我们每次解析 xml 文件时都会使用越来越多的内存...
不,据我所知,您不必为此担心。假设引用 cElementTree
实例的唯一变量是变量 tree
,那么该实例将在 tree
超出范围后很快被删除。为了进行实验,您可以定义一个 class
,它会在删除时打印一些内容,以便您知道删除发生的时间,就像发布的 here :
class C:
def __del__(self):
print "delete object"
然后使用在与 tree
变量相同范围内声明的变量引用 class 的实例:
def open_xml():
....
try:
tree = Etree.parse("xml_file.xml")
c = C()
....
这样您就可以通过删除 c
引用的实例来预测删除 tree
引用的实例,因为它们是在同一范围内声明的。现在观察并查看 "delete object"
是否打印到您的控制台。
我为我的工作创建了一个小工具,它解析 xml 个文件以查找元素的文本;示例代码:
import xml.etree.cElementTree as Etree
def open_xml():
"""
Retrieves info from the xml file
"""
try:
tree = Etree.parse("xml_file.xml")
text_to_find = tree.findtext(
path=".//ns:some_element",
namespaces={"ns": "http://something.com/something"})
print text_to_find
except IOError:
print "No xml file found."
这是图形用户界面的一部分;我们从不关闭该应用程序,它始终 运行 在专用计算机上。
如果我没理解错的话,python 在内存中创建了一个代表 xml 树的对象。我的问题是:打印完信息后是否需要清除该对象的内存?我担心我们每次解析 xml 文件时都会使用越来越多的内存...
不,据我所知,您不必为此担心。假设引用 cElementTree
实例的唯一变量是变量 tree
,那么该实例将在 tree
超出范围后很快被删除。为了进行实验,您可以定义一个 class
,它会在删除时打印一些内容,以便您知道删除发生的时间,就像发布的 here :
class C:
def __del__(self):
print "delete object"
然后使用在与 tree
变量相同范围内声明的变量引用 class 的实例:
def open_xml():
....
try:
tree = Etree.parse("xml_file.xml")
c = C()
....
这样您就可以通过删除 c
引用的实例来预测删除 tree
引用的实例,因为它们是在同一范围内声明的。现在观察并查看 "delete object"
是否打印到您的控制台。