2011-02-03 9 views
2

単一サイトからHTTP経由で1mページを取得しようとしています。 urlgrabberは、 "keep alive"接続を使用した高速ソリューションのようです。しかし、しばらくすると、私のスクリプトはスタックトレースなしで失敗します: "致命的なPythonエラー:割り当てを解除します"「致命的なPythonエラー:割り当て解除なし」とurlgrabber

ここでは失敗した孤立したpythonコードです(簡略化のためfile:// URLが使用され、同じ結果が得られます)。

import urlgrabber 

url = "file:///some/existing/file.html" 

for i in range(0, 15000): 
    print i 
    handle = urlgrabber.urlopen(url, timeout = 1) 
    # do something useful 
    handle.close() 

〜3231サイクル後に失敗します。

私は間違っていますか?

+1

あなたはどのPythonバージョンを使用していますか?最新版を入手してください(2.xブランチ2.7.1)。バグが修正された可能性があります。 – 9000

+0

これは、オブジェクト参照カウンタに関連するバグのように聞こえるので、モジュール開発者からのより良い点検です。 –

+4

http://www.mail-archive.com/[email protected]/msg00000.html urlgrabberがfdsをリークしているようです。 – ismail

答えて

1

他の人が触れたように、この多くのグラブを実行すると、urlgrabberに問題が発生します。また、数十万のURLを実際に取得している場合、これは不幸にも遅くなるでしょう。代わりに、信頼できるウィジェットを検討してください。

もちろん、あなたはPythonの解決策が必要だと言うでしょう。そのためには、この種の大規模な擦り切りを行う最良の方法であると一般に合意されているScrapy at http://scrapy.org/を必ずチェックしてください。

関連する問題