0

私はさまざまなソースからいくつかのデータを抽出するためにスクレイピーを使用しています。これは非常にうまく機能しますが、大きな XML ファイル (約 100MB => 40000 アイテム) からデータを抽出するスパイダーを作成しました。

私はスクレイピー XMLFeedSpiderを使用しています。

問題は、scrapy が大量のメモリ (1GB 以上) を使用していることであり、アイテムで使用されているメモリを解放しない理由がわかりません。

(telnet でスパイダーに接続するために) 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

すべてのアイテム パイプラインを無効にしました。

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

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

4

1 に答える 1

0

「prefs」の出力によると、その最初の列はクラス名であり、Scrapyには「CustomName」という名前のクラスはありません。この名前は、XMLフィールドの列のように見えます。さらに、これらの奇妙な2行を見たことがありますか。

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

「異なるクラスですが、同じ名前です」という意味です。コードを投稿する必要があります。「CustomName」という名前のItemクラスだと思います。

于 2012-04-17T12:31:21.300 に答える