Perl でマルチスレッドでスクレイピング
PC/AV/Tech - 2014/02/03 04:41:47
1つのスレッドのみで100件処理すると120秒掛かってたのが、5つのスレッドで同時並行させると29秒まで短縮。 5倍とまでは行かないけど、4倍も速くなるならマルチスレッドの効果はあなどれない。
比較的簡単に実装できるとは言え、共有した変数でのリファンス部分が微妙に面倒臭い。 でも慣れればそうでもないのかな?
あと1つのデータを複数のスレッドが扱うから、処理後の結果出力などデータの扱いには特に気を使うこと。
Google で perl threads threads::shared とかで検索すれば、分かりやすいサンプルとか書いてる人がいるので参考になるかもしれません。
5.16 でテストコード書いてるとき、binmode(STDOUT, ':encoding(CP932)');
とかやると Perl が落ちたので、日本語をコンソールへ出力するときは encode('CP932', $text)
として出力する方が良いです。 これのせいで2時間ぐらいはまった。
Perl でマルチスレッドでスクレイピング
http://0pm.0am.jp/memo3/index.cgi?entry=20140203_044147