2012-04-05 110 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」。