私の目的は、一度に複数のWebサイトを処理し、1つ以上のクエリーも処理する分散クローラーを構築することです。 このために、私はPythonで 'requests'や 'BeautifulSoup'のような標準パッケージを使ってWebクローラーを構築しました。それはうまく動作します。 配布するために、私はrabbitMQを使いました。これにより、1つ以上のプロセスがクロールを支援することで、システムの高速化を実現できます。Pythonの分散コンピューティング - Webクローラー
私のシステムはworkpoolモデルで動作します:
- 私は、メインサーバがクエリを受信し、それらのそれぞれのための新しいクロールを開始しています。
- クロールを開始すると、クエリを検索エンジンに入力することによっていくつかのURLが収集されます。
- これ以降、メインサーバーはrabbitMQで利用可能なワーカー/プロセスにURLを送信し、より多くのURLを受け取るのを待ちます。
しかし、私は、このアーキテクチャでは、巨大なボトルネックを持って、それがRabbitMQのは私が(channel.basic_qos()関数がない時点で1つの以上のメッセージを消費することはできません...メインサーバではありません作業!)。 私が欲しかったのは、(私が今行っていたように)各クエリーに対してプライベートキューを持ち、これらの2つのクエリーを同時に、できるだけ速く処理できることでした。つまり、一度に1つのURLではなく、最大量のURLを処理できるように、ワーカーコードを並列化します。
ここでrabbitMQを置き換えるにはどうすればよいですか?私は具体的にはrabbitMQの開発者に達しました。私が望むことはできませんので、私は別の '配布パッケージ'を探しています。多分カフカ?
あなたの答えをありがとう。マルチプロセッシングは、間違いなく並列化のアイデアです。 しかし、私が言ったように、私はクロールを分散させるためにrabbitmqを使用しています(多くのコンピュータ/プロセスが参加できます)、それがボトルネックの原因になっています。 – Skinishh