При использовании Curl_multi_* один запрос выполняется около 20 итераций, несмотря на использование Curl_multi_select. ПPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 При использовании Curl_multi_* один запрос выполняется около 20 итераций, несмотря на использование Curl_multi_select. П

Сообщение Anonymous »

Из документации по Curl_multi_select:

Блокирует выполнение скрипта до тех пор, пока дескриптор cURL, прикрепленный к мульти-дескриптору cURL, не сможет выполнить работу. при следующем вызове Curl_multi_exec() или до истечения тайм-аута (в зависимости от того, что наступит раньше).

Я не до конца понимаю, как работает эта функция и почему это не так блокировать выполнение кода до тех пор, пока не будет выполнен один запрос. Он блокирует выполнение, но не полностью...
Вот мой код:

Код: Выделить всё

$urls = [
'https://google.com',
];

$mh = curl_multi_init();
foreach ($urls as $i => $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch);
}

$timeout = 5;
$loop = 0;
$unfinishedHandles = 0;
do {
$loop++;
$status = curl_multi_exec($mh, $unfinishedHandles);
if ($unfinishedHandles > 0) {
curl_multi_select($mh, $timeout);
}

while (($info = curl_multi_info_read($mh)) !== false) {
if ($info['msg'] === CURLMSG_DONE) {
$handle = $info['handle'];
curl_multi_remove_handle($mh, $info['handle']);
if ($info['result'] === CURLE_OK) {
$chInfo = curl_getinfo($info['handle']);
echo "Request to {$chInfo['url']} completed", PHP_EOL;
}
}
}
} while ($unfinishedHandles);

curl_multi_close($mh);

echo 'Iterations: ', $loop, PHP_EOL;
Результат:

Код: Выделить всё

Request to https://google.com/ completed
Iterations: 15
Почему здесь 15 итераций?
Если я прокомментирую вызов curl_multi_select, будет 125779 итераций. Если я уменьшу $timeout, я также получу больше итераций. Это понятно. Значит функция работает, но почему 15-20? Я не могу понять...

Подробнее здесь: https://stackoverflow.com/questions/791 ... despite-cu
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»