Scrapy蜘蛛不释放物品记忆

时间:2012-04-05 15:31:05

标签: python xml scrapy web-crawler

我正在使用scrapy从各种来源中提取一些数据,而且效果非常好 但现在我写了一个蜘蛛来从一个大的XML文件中提取数据(大约100MB => 40000项)。

我正在使用sc XMLFeedSpider

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

当我使用scref的trackrefs工具(用telnet连接我的蜘蛛)时,我得到以下输出:

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

我已禁用所有项目管道。

在我的蜘蛛中,我没有保留任何物品参考,我只是创建物品并将它们归还。 我无法找到内存泄漏的位置......

是否有解释为什么我的物品没有被释放?

1 个答案:

答案 0 :(得分:0)

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

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

这意味着“不同的类,但具有相同的名称”。你应该发布你的代码。我猜你的Item类只是命名为“CustomName”。