私はPythonで簡単なWebクローラーを作った。これまでに行われたすべてのことは、訪れたはずのURL、既に訪れたURLのセットを作成します。ページを解析する間に、そのページのすべてのリンクを訪問済みのセットに追加し、ページURLを既に訪問したセットに追加します。その間にshould_be_visitedの長さは0です。これまでのところ、すべてのことが1つのスレッドで行われます。Webクローラー用のPythonスレッドまたはマルチプロセッシング?
このアプリケーションに並列性を追加したいので、同じ種類のリンクといくつかのスレッド/プロセスを持つ必要があります。それぞれがshould_be_visitedから1つのURLをポップアップし、already_visitedを更新します。私は本当にスレッド化とマルチプロセッシングで失われています。私はこれを使用する必要があります。プール、キューが必要ですか?
訪問するURLのセットについては、同じサーバーのURLの多く、またはすべてが異なるサーバーのURLのセットですか? – halfer
すべてから同じ – wasd
OK、その場合は、サーバーがあなたのコントロール下にあり、サーバー/ネットワークが負荷を処理できない限り、まったく並列化しないでください。遠隔管理者にサービス拒否攻撃として現れる要求をスピードアップするのではなく、各要求の間にわずかな遅れを入れなければなりません。スクレイピングの広範なルールは、**遅くなくてもすばやく**実行する必要があります。これを監視しないと、サーバーがIPブロックリストに登録される可能性があります。 – halfer