URLGrabberで数千件のURLをkeep-aliveで取得しようとすると、大体同じような回数でFatal Python error: deallocating Noneが出ることがあります。
どうやら、PycURLの参照カウントの問題らしいです。
パッケージでインストールされるものは古いので、PycURLを最新のソースからインストールしなおしましょう。以下、環境はDebian squeeze+python 2.6。
python-pycurlをすでにインストールしている場合はアンインストールしておく必要があります。
# aptitude install python-pycurl
でインストールしている場合は、
# aptitude purge python-pycurl
でアンインストールしておきましょう。
pycurlは最新のものをsourceforgeのCVSからダウンロードします。
SourceForge.net Repository – [pycurl] Index of /pycurl
下の方にある、「Download GNU tarball」のリンクからtarファイルをダウンロードできます。
ダウンロードしたファイルをpycurl.tar.gzなどに名前変更して、tar xvzf pycurl.tar.gzで展開できます。
ビルドにはcurl-configとPython.hなどが必要なので、必要なパッケージをインストールしておきます。
# aptitude install python2.6-dev libcurl4-gnutls-dev
pycurl.tar.gzを展開したら
# cd ./pycurl/
# python setup.py install
で、インストール完了です。
ちなみに、python2.6-devをインストールしていないと、
src/pycurl.c:42:20: error: Python.h
のようなエラーが大量に出ます。
とりあえずこれで、今のところ安定動作しています。
タグ: Python