2012-04-02 17 views
2

私は、同時に複数のURLを処理し、次のように動作するウェブクローラを書いています:処理順序

  1. それはseed_listに含まれるURLのリストからURLを取得します。 txt、

  2. これをクロールしてdata.txtに書き込む。

ほとんどのWebクローラの動作と同様です。

私はシングルスレッド化すると、data.txtのデータをseed_list.txtのURLと同じ順序で取得できますが、マルチスレッドの場合は制御できないようですそれは、各スレッドがdata.txtにデータを書き込むと、終了します。

Webクローラーをマルチスレッドにすることはできますが、元の順序を維持する方法はありますか?

ありがとうございました!


@Lance、イグナシオ、およびMaksym、

あなたの助けのすべてに感謝 - あなたの答えは間違いなく正しい方向に私を指します。

答えて

1

seed_list.txtの行のインデックス番号、URL、およびウェブからのデータの場所を持つクラスを作成できます。この型のオブジェクトは、行番号とURLで作成し、ワーカースレッドに渡してデータをオブジェクトに入れ、オブジェクトを行でオブジェクトを順序付ける書き込みスレッドに渡します必要に応じてデータを出力します。

+0

ありがとうございます。正しい方向に私を指摘してください。 – BananaOnTheWall

2

各クローラスレッドの結果を列挙するスレッドを追加します。

1

キューを介してデータを出力し、それと対話する特別なスレッドを実行できます。私は、あなたの「クロール」スレッドがテキストファイルに結果を書き込むのではなく、それをキューに入れることを意味します。

この '出力'スレッドは結果をソート/フィルタできます。

関連する問題