Слишком долгая инициализация multi curl

218
03 июня 2018, 23:10

На вход обработки multi curl подаю массив из ссылок, файлы по которым весят в среднем 300-500кб.Но проблема в том что,например, при сотне ссылок курл думает почти что 4 минуты, и только потом начинает создавать потоки и качать.Если же я подаю массив из 1000 ссылок, то время раздумий может вообще перевалить за 20 минут, что, как мне кажется, совершенно не нормально.Как можно оптимизировать код, чтобы он работал быстрее и не тормозил так?Может можно как-то искусственно ограничить число потоков хотя бы до 10?

    $mh = curl_multi_init();
    foreach($clear_pager as $i => $url)
    {
      $ch[$i] = curl_init($url);
      curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
      curl_multi_add_handle($mh, $ch[$i]);
    }
    do {
        $execReturnValue = curl_multi_exec($mh, $runningHandles);
    } while ($execReturnValue == CURLM_CALL_MULTI_PERFORM);
    while ($runningHandles && $execReturnValue == CURLM_OK) {
      // Wait forever for network
      $numberReady = curl_multi_select($mh);
      if ($numberReady != -1) {
        // Pull in any new data, or at least handle timeouts
        do {
          $execReturnValue = curl_multi_exec($mh, $runningHandles);
        } while ($execReturnValue == CURLM_CALL_MULTI_PERFORM);
      }
    }
    $schetchik = 1;
    $allin = count($clear_pager);
    foreach($clear_pager as $i => $url) {
        $current_file = curl_multi_getcontent($ch[$i]);
            file_put_contents(dirname(__FILE__).'/arts/'.$GLOBALS['a'].'/'.basename($url), $current_file);
            $schetchik++;
            unset($current_file);
            echo '#::['.$schetchik.' of '.$allin.']:  '.$url."</br>";
            flush();
            curl_multi_remove_handle($mh, $ch[$i]);
            curl_close($ch[$i]);
        }
    curl_multi_close($mh);

И если подаю большие массивы, то стабильно вываливается фатальная ошибка об переполнении памяти. пытался втиснуть unset после file_put_contents(), но эффекта вообще ноль.

READ ALSO
Скачивание файла средством apigility + dompdf

Скачивание файла средством apigility + dompdf

Всем привет! Пишу api, задача выдать файл pdf на скачиваниеФайл скачивается, но в конец дописывается текст: © Copyright 2013 - 2018 by Zend Technologies Ltd

199
помощь по сайту

помощь по сайту

Номер и имя человека мне приходит в datatxt, но прикрепленные файлы не приходят, опишите пожалуйста подробно что сделать что бы они тоже приходили

201
Вывести таксономии поста Wordpress

Вывести таксономии поста Wordpress

Такой вопросЕсть кастомный тип записи 'sumples'

172
Web PUSH (PHP, CURL, CRON)

Web PUSH (PHP, CURL, CRON)

Стоит задача: отправлять пользователям сайта Web PUSH уведомления, когда наступает определенное событиеДелать это необходимо максимально быстро...

211