これは、1秒のブロッキングで暮らすことができる限り役立ちます。
manual page for curl_multi_select
には、少なくとも1つの接続が完了するか、または$timeout
秒のいずれか早いほうが起きるまで、このブロッキングについてのコメントがあります。 、以前この変更に
// execute the handles
$still_running = null;
$this->full_curl_multi_exec($mh, $still_running);
// check whether the handles have finished
do { // "wait for completion"-loop
curl_multi_select($mh); // non-busy (!) wait for state change
$this->full_curl_multi_exec($mh, $still_running); // get new state
while ($info = curl_multi_info_read($mh)) {
// process completed request (e.g. curl_multi_getcontent($info['handle']))
}
} while ($still_running);
PHP 5.4でテストされたコードは働いていませんでした。
private function full_curl_multi_exec($mh, &$still_running) {
do {
$rv = curl_multi_exec($mh, $still_running);
} while ($rv == CURLM_CALL_MULTI_PERFORM);
return $rv;
}
を次にハンドルを実行するためにチェックし、あなたのループを変更します。彼らはまたcurl_multi_select
への呼び出しをラップすべきことであるが、書き込みthis bug in PHP 5.3.18のPHP 5.3.20を実行しているAmazonインスタンスでは、への呼び出しは決して他のものを返さないようにします。-1
これで、n 200個のバッチのバッチを使用して30秒未満で最初の1,300のURL