2012-04-05 10 views
0

Ich benutze Scrapy, um einige Daten aus verschiedenen Quellen zu extrahieren, und es funktioniert wirklich gut aber jetzt habe ich eine Spinne geschrieben, um Daten aus einer großen XML-Datei (ca. 100 MB => 40000 Artikel).Scrapy Spider nicht Artikel Speicher freigeben

Ich benutze die scrapy XMLFeedSpider.

Das Problem ist, scrapy verwendet eine Menge Speicher (1 GB oder mehr) und ich weiß nicht, warum es nicht die von meinen Artikeln verwendeten Memomry freigibt.

Als ich das trackrefs Werkzeug von scrapy verwenden (meiner Spinne mit Telnet zu verbinden) bekomme ich folgende Ausgabe:

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

ich die Artikel Pipelines deaktiviert alle haben.

In meiner Spinne behalte ich keinen Bezug von Gegenständen, ich erschaffe nur Gegenstände und gebe sie zurück. Ich kann nicht finden, wo der Speicher leck ist ...

Gibt es eine Erklärung, warum meine Artikel nicht freigegeben werden?

+0

Scrapy akkumuliert keine Objekte im Speicher, und wenn dies der Fall ist, wird es als Fehler betrachtet. Überprüfen Sie Ihre Spider-Middlewares, falls der von XMLFeedSpider zurückgegebene Generator in einer Liste verwendet wird. Es ist viel einfacher, wenn Sie Ihren Projektcode anzeigen können. – dangra

Antwort

0

Entsprechend der Ausgabe von "prefs" ist seine erste Spalte Klassenname und Scrapy hat keine Klasse namens "CustomName". Dieser Name sieht wie eine Spalte im XML-Feld aus. Weiter mehr, haben Sie diese seltsamen zwei Zeilen zu sehen:

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

Es bedeutet "verschiedene Klassen, aber mit demselben Namen". Sie sollten Ihren Code veröffentlichen. Ich schätze, Ihre Item-Klasse hat gerade den Namen "CustomName".

Verwandte Themen