コメントの取得速度向上〜phpで並列処理〜
ニコニコ動画からコメントを複数取得する場合、
諸事情により結構時間がかかってしまう。
そこで、複数セッションで並列処理を行えばいいと考えたのが下。
<?php // cURL リソースを作成します $ch1 = curl_init(); $ch2 = curl_init(); $ch3 = curl_init(); $ch4 = curl_init(); // URL およびその他適切なオプションを設定します。 curl_setopt($ch1, CURLOPT_URL, "get.php?pid=0"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "get.php?pid=1"); curl_setopt($ch2, CURLOPT_HEADER, 0); curl_setopt($ch3, CURLOPT_URL, "get.php?pid=2"); curl_setopt($ch3, CURLOPT_HEADER, 0); curl_setopt($ch4, CURLOPT_URL, "get.php?pid=3"); curl_setopt($ch4, CURLOPT_HEADER, 0); // マルチ cURL ハンドルを作成します $mh = curl_multi_init(); //ハンドルを追加します curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); curl_multi_add_handle($mh,$ch3); curl_multi_add_handle($mh,$ch4); $active = null; //開始時間取得 $time = time(); // ハンドルを実行します do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } // ハンドルを閉じます curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_remove_handle($mh, $ch3); curl_multi_remove_handle($mh, $ch4); curl_multi_close($mh); //実行時間 $time = time() - $time; echo '--<br />time: '.floor($time / 60).'min '.fmod($time,60).'sec'; ?>
ほとんどがPHPマニュアルからの引用。
同時4プロセスに増強ww(ああ、Core i7欲しい)
確認用に実行時間も表示。
get.phpはパラメータで処理を分けて並列処理ができるように作れば完成。
これは、ちょっとだけ楽しいw
配列使えば16プロセスとかできるのかな?(確実に垢BANされる?)