【问题标题】:Scrapy spider doesn't release items memoryScrapy spider 不会释放项目内存
【发布时间】:2012-04-05 15:31:05
【问题描述】:

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

我正在使用scrapy XMLFeedSpider

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

当我使用 scrapy 的 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

我已禁用所有项目管道。

在我的蜘蛛中,我不保留任何项目引用,我只是创建项目并返回它们。 我找不到内存泄漏在哪里...

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

【问题讨论】:

  • Scrapy 不会在内存中累积项目,当它累积时它被认为是一个错误,请检查您的蜘蛛中间件,以防 XMLFeedSpider 返回的生成器被消耗到列表中。如果你能展示你的项目代码就简单多了。

标签: python xml scrapy web-crawler


【解决方案1】:

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

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

意思是“不同的类,但同名”。你应该发布你的代码。我猜你的 Item 类刚刚命名为“CustomName”。

【讨论】:

    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多