我使用scrapy从各种来源提取一些数据,它运行得非常好但现在我已经编写了一个spider来从一个大的XML文件(大约100MB=>40000个项目)中提取数据。
我使用的是粗糙的XMLFeedSpider。
问题是使用了大量内存(1GB或更多),我不知道为什么它不释放我的物品使用的内存。
当我使用scray的trackrefs工具(通过telnet连接到我的spider)时,我得到以下输出:
>>> 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
我已禁用所有项目管道。
在我的蜘蛛中,我不保留任何项目的引用,我只是创建项目并返回它们。我找不到内存泄漏在哪里。。。
有没有解释为什么我的物品没有发布?
根据"prefs"的输出,它的第一列是类名,Scrapy没有名为"CustomName"的类。这个名称看起来像XML字段中的某个列。此外,你有没有看到这两条奇怪的线:
CustomName 1 oldest: 163s ago
CustomName 38893 oldest: 150s ago
意思是"不同的类,但名称相同"。你应该发布你的代码。我猜您的Item类刚刚命名为"CustomName"。