2012-04-05 18 views
0

私は様々なソースからいくつかのデータを抽出するためにscrapyを使用していますが、それは本当にうまく動作しますが 今は大きなXMLファイル(約100MB = 40000アイテム)。Scrapyスパイダーはアイテムメモリを解放しません

私はスクラブXMLFeedSpiderを使用しています。

問題は、多くのメモリ(1GB以上)を使用していますが、なぜ私のアイテムで使用されているmemomryを解放しないのか分かりません。

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

私は、すべてのアイテムのパイプラインを無効にしています。

私のスパイダーではアイテムの参照を保持していないので、アイテムを作成して返すだけです。 メモリリークがどこにあるのかわかりません...

私のアイテムがリリースされない理由はありますか?

+0

Scrapyはアイテムをメモリに蓄積せず、それがバグとみなされるときは、XMLFeedSpiderによって返されたジェネレータがリストに消費された場合に備えて、あなたのスパイダーミドルウェアをチェックしてください。プロジェクトコードを表示できるのであれば、はるかに簡単です。 – dangra

答えて

0

"prefs"の出力によれば、その最初の列はクラス名であり、Scrapyには "CustomName"という名前のクラスはありません。この名前は、XMLフィールドの列のように見えます。それは、「異なるクラスが、同じ名前を持つ」という意味

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

:さらに多くの、あなたはこれらの奇妙な2行を見ています。コードを投稿する必要があります。あなたのItemクラスはちょうど "CustomName"という名前だと思います。

関連する問題