私はhtmlファイルを解析するためにBeautifulSoupを使用していますが、私が書いたすべてのスクリプトはうまく機能しますが遅いです。そのため、プログラムをより高速に実行できるように、BeautifulSoup と一緒にワーカーのマルチプロセッシング プールを使用して実験しています (100,000 から 1,000,000 の html ファイルを開く必要があります)。私が書いたスクリプトはもっと複雑ですが、ここに小さな例を書き留めておきます。私はこのようなことをしようとしていますが、エラーが発生し続けます
「RuntimeError: オブジェクトのピクル処理中に最大再帰深度を超えました」
編集されたコード
from bs4 import BeautifulSoup
from multiprocessing import Pool
def extraction(path):
soup=BeautifulSoup(open(path),"lxml")
return soup.title
pool=Pool(processes=4)
path=['/Volume3/2316/http/www.metro.co.uk/news/852300-haiti-quake-victim-footballers-stage-special-tournament/crawlerdefault.html','/Volume3/2316/http/presszoom.com/story_164020.html']
print pool.map(extraction,path)
pool.close()
pool.join()
いくつかの投稿を検索して掘り下げた後、BeautifulSoup が Python インタープリター スタックの深さを超えているためにエラーが発生していることを知りました。制限を上げて同じプログラムを実行しようとしましたが (3000 まで上げました)、エラーは同じままです。問題はhtmlファイルを開くときのBeautifulSoupにあるため、制限を上げるのをやめました。
BeautifulSoup で multiprocessing を使用すると、実行時間が短縮されますが、それを適用してファイルを開く方法がわかりません。
マルチプロセッシングで BeautifulSoup を使用する方法、またはこれらの種類のエラーを克服する方法について、他のアプローチを持っている人はいますか?
あらゆる種類の助けをいただければ幸いです。私はそれを修正しようとして何時間も座っており、エラーが発生する理由を理解しています。
編集
パスで指定したファイルを使用して上記のコードをテストしたところ、上記と同じ RuntimeError が発生しました
ファイルはここからアクセスできます ( http://ec2-23-20-166-224.compute-1.amazonaws.com/sites/html_files/ )