2016-01-24 4 views
1

Я создал небольшой инструмент для своей работы, он анализирует XML-файлы, чтобы найти текст элемента; пример кода:python 2.7 xml.etree.cElementTree использование памяти

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." 

Это часть gui; мы никогда не закрываем приложение, оно всегда работает на выделенном компьютере.

Если я правильно понимаю, python создает объект в памяти, представляющий дерево xml. Мой вопрос: мне нужно очистить память этого объекта после того, как я закончил печатать информацию? Я беспокоюсь, что каждый раз, когда мы разбираем файл xml, мы используем все больше и больше памяти ...

ответ

2

Нет, вам не о чем беспокоиться, насколько я знаю. Учитывая, что единственной переменной, ссылающейся на экземпляр cElementTree, является переменная tree, тогда экземпляр будет удален вскоре после того, как tree выходит за рамки. Для эксперимента можно определить class, который будет печатать что-то, когда он будет удален, так что вы знаете, когда удаление происходит, как и один отвечал here:

class C: 
    def __del__(self): 
     print "delete object" 

и затем ссылаться на экземпляр этого класса с помощью переменной, объявленной в одинаковый объем как переменная tree:

def open_xml(): 
    .... 
    try: 
     tree = Etree.parse("xml_file.xml") 
     c = C() 
     .... 

Таким образом, вы можете предсказать удаление экземпляра, на который ссылается tree путем удаления экземпляра, на который ссылается c, поскольку они объявлены в том же объеме. Теперь просмотрите &, если "delete object" напечатайте на своей консоли.

+1

Кажется, что это работает, и ваш ответ имеет смысл: переменная удаляется из памяти, как только она выходит из области видимости. Большое спасибо за этот трюк, он, вероятно, пригодится в будущем ;-) –

 Смежные вопросы

  • Нет связанных вопросов^_^