16章並列にWebクローリング

クローリングは高速です。少なくとも、十数人の研修生を雇ってインターネットから手作業でデータをコピーするよりは、はるかに速いのが普通です。もちろん、技術進歩と急速な需要の高まりから、現在の処理速度では「十分高速だ」とは言えません。このような状況で分散コンピューティングが検討されます。

他の技術分野とは異なり、Webクローリングでは、「問題を解くエンジンを増やす」だけでは改善しません。1つのプロセスの実行は速いです。2つのプロセスを実行しても2倍速くなるとは限りません。3つのプロセスを実行しようとすると、リクエストを送っているリモートサーバから禁止されることもあります。

しかし、次のような状況においては、並列Webクローリング、すなわち、スレッド/プロセスの並列実行が効果的な場合があります。

  • 単一の情報源ではなく複数の情報源(複数のリモートサーバ)からデータを収集する。
  • データの取得と並列に実行できる(画像分析やOCRのような)収集データに対する長時間/複雑な演算を行う。
  • クエリごとに支払いが発生したり、サービスに対して複数のコネクションを張ることが契約で許される範囲であるような大規模Webサービスにおいてデータを収集する。

16.1 プロセスとスレッド

Pythonはマルチプロセスもマルチスレッドも両方ともサポートします。マルチプロセスもマルチスレッドも、プログラムを従来通り1つずつ実行する代わりに、同時に複数のプログラミングされたタスクを実行するという同じ究極の目標を達成します。

OS上で実行されているプロセスはそれぞれ複数のスレッドを持つことができます。各プロセスには、独自のメモリが割り当てられ、複数のスレッドはその同じメモリを共有しますが、複数のプロセスはメモリを共有できず、情報を明示的に通信しなければなりません。 ...

Get PythonによるWebスクレイピング 第2版 now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.