2012-04-05 86 views
0

我正在使用scrapy从各种来源提取一些数据,它运作得非常好 但现在我写了一个蜘蛛从大XML文件中提取数据(大约100MB => 40000项)。Scrapy蜘蛛不释放项目内存

我正在使用scrapy XMLFeedSpider

问题是scrapy正在使用大量内存(1GB或更多),我不知道它为什么不释放我的项目使用的内存。

当我使用scrapy的trackrefs工具(与远程登录连接到我的蜘蛛)我得到以下的输出:

>>> prefs() 
    Libxml2Document      2 oldest: 160s ago 
    CustomName       1 oldest: 163s ago 
    XmlResponse       1 oldest: 161s ago 
    XmlXPathSelector     1 oldest: 0s ago 
    Request        1 oldest: 163s ago 
    CustomName       38893 oldest: 150s ago 

我已禁用所有的项目管道。

在我的蜘蛛我不保留任何物品的参考,我只是创建项目并返回它们。 我无法找到内存泄漏的位置...

有没有解释为什么我的项目没有发布?

+0

Scrapy不会在内存中累积项目,并且它在执行时会被视为一个错误,请检查您的蜘蛛中间件以防万一XMLFeedSpider返回的生成器被消耗到列表中。如果你能显示你的项目代码,它就简单多了。 – dangra 2012-04-09 11:52:59

回答

0

根据“prefs”的输出,其第一列是类名,而Scrapy没有名为“CustomName”的类。该名称看起来像XML字段中的某个列。还有,你看到这两条奇怪的线:

CustomName       1 oldest: 163s ago 
CustomName       38893 oldest: 150s ago 

它表示“不同的类,但同名”。你应该发布你的代码。我猜你的Item类只是名为“CustomName”。