标签: memory leak

  • Python模块libxml2

    libxml2是一个很强大的处理XML文件的Python模块,通过C写成,这里介绍了一下基本的资料,安装,下载和基本指令,还有一个libxml2造成的内存泄露的处理方式。

    官方网址:
    http://xmlsoft.org/
    具体的下载地址,埋的很深,至少我花了一段时间才找到,这里直接给出win32下的Python模块下载地址:
    http://xmlsoft.org/sources/win32/python/
    根据自己的Python版本下载就行。

    官方网站上给的操作信息是在少的可怜,只有单单一页的Python API介绍
    http://xmlsoft.org/python.html

    后来找了一些大神的博客才算零零碎碎的筹齐需要的知识点:
    http://mohsinpage.wordpress.com/2011/02/03/xpath-libxml2-in-python/
    http://ukchill.com/technology/getting-started-with-libxml2-and-python-part-1/
    http://ukchill.com/technology/getting-started-with-libxml2-and-python-part-2/

    这几就介绍一下最简单的操作:

    [python]
    import libxml2
    doc = libxml2.parseFile(filename) #可以使用parseDoc代替parseFile,两者的区别是DOC处理已经读进进程的文件,File是能自己读取文件,所以只需要提供文件名。
    ctxt = doc.xpathNewContext()
    record_nodes = ctxt.xpathEval(‘/*’) #括号中的XPATH,这是寻找的是根目录下的所有NODE。 xpathEval寻找结果给出的是一个x列表,如xrange(10)生成的内容。
    for node in record_nodes:
    name = node.name #node的名字
    content = node.content #node的内容
    sous-nodes = node.xpathEval(‘*’) #node下面的子node,同处理根目录的原理一下进行处理。

    #释放内存
    if doc:
    doc.freeDoc()
    [/python]

    由于libxml2在读取xml文本后不会自动释放内存,因此会出现内存泄露问题,这个困扰了我好久,一直以为是Python的程序问题,,找了一大堆Python程序的内存管理资料,但是最后才发现是libxml2的问题。所以上面代码中给出了释放内存的指令,非常非常重要!

    ps python下管理内存模块gc

    [python]
    import gc

    a=[‘abc’ for x in range(1000**5)]
    del a
    gc.collect()
    [/python]