在Ubuntu12.04中,使用Python3时lxml存在内存泄漏问题。

4

我刚刚在一台安装了Python 3.2.3的Ubuntu12.04电脑上使用easy_install安装了最新版本的lxml,即3.0Alpha。

我尝试了以下代码:

import lxml.html

def proc_tweet(ss):
    html=lxml.html.fragment_fromstring(ss)
    ps=html.xpath("//p[@node-type='feed_list_content']")

def test():
    ss=''
    f=open('test')
    for l in f: ss+=l.strip()
    f.close()
    while True: proc_tweet(ss)

if __name__=='__main__':
    test()

这里的“test”是一个文件,包含一个简短的HTML片段:

<dl action-type="feed_list_item" mid="3409553360609821" class="feed_list W_linecolor"> 
    <dd class="content"> 
        <p node-type="feed_list_content">This is a drill.</p> 
    </dd> 
    <dd class="clear"></dd> 
</dl>

问题是随着时间的推移,lxml会占用我所有的内存。我尝试了以下方法:
del ps
del html

它不起作用。有人知道为什么吗?


你是如何测量“占用了我所有的内存”的?操作系统按程序的要求分配内存,但除非其他地方需要该内存,否则不会回收该内存,即使程序已经释放了该内存,这可能就是问题所在。 - Martijn Pieters
当我注释了ps=html.xpath("//p[@node-type='feed_list_content']")这行代码时,内存使用情况正常。 - LaoMao
我的意思是最后会用完8G的内存。Python会自动管理内存使用情况。它应该自动释放内存。但在我的代码中却没有这样做。 - LaoMao
由于这是一个alpha版本,很可能会有泄漏。你是否已经向lxml项目报告了此问题?他们将更好地设置来诊断此问题。 :-) - Martijn Pieters
谢谢。我给他们发了电子邮件,但没有回应。 - LaoMao
显示剩余3条评论
1个回答

1

这是在3.0 beta 1中修复的一个漏洞。

为了以后参考,最好直接向维护软件工具的项目报告问题,而不是在互联网上的任意地方发布。Launchpad漏洞跟踪器是报告lxml漏洞的正确位置。Github跟踪器主要用于拉取请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接