1

私は Web クローラーに取り組んでおり、マルチプロセッシングを使用して、一度に 4 つのページをダウンロードして処理しています。ただし、同じページを複数回クロールするつもりはありません。

マルチプロセッシングを実装する前に、クロールされた URL のコレクションを維持するためにセットを使用しました。メンバーシップ テストに理想的であるため、セットを選択しました。multiprocessing.Manager は、4 つのプロセス間で共有 Set を実装するのに役立つと思いました。しかし、そうではありません。

私がやりたいことは次のようなものです

manager = Manager()
d = manager.set()

しかし、Manager クラスにはそのような関数はありません。

私の問題を解決する方法や解決策を知っている人はいますか?

4

2 に答える 2

0

訪問した Web サイトのベース ストアとして list を使用します。1) ロック 2) 配列に値があるかどうかをチェック 3) アクセスされていない場合は URL を追加 4) ロック解除

または、URL を配置できる通常のセットを持つ別のプロセスを作成します。Web サイトが訪問されたかどうかを確認する必要があるプロセスは、キューまたはパイプを介してその 1 つのプロセスと通信するだけです。

于 2012-09-27T18:53:46.453 に答える
0

multiprocessingには が実装されています。これは、メンバーシップ テストdict()の機能的な代替となるはずです。set()

キーを使用して、メンバーシップ検索を実行する URL を保存し、必要なものを値に保存します。

d = manager.dict()

# Store some values
d['http://dr.dk'] = 1
d['http://stackoverflow.com'] = 1

# Do membership lookup
if 'http://stackoverflow.com' in d:
    print "We have visited Stack Overflow"

if 'http://google.com' not in d:
    print "We have not visited Google"
于 2012-10-08T11:05:04.597 に答える