Есть 100к URL. Нужно спарсить их содержимое. Как сделать обход этого количества в 5 поток одновременно (php+curl)?

В базе есть список из 100 000 URL-адресов.
Если в один поток в цикле перебирать - займет много времени.
Как сделать обход этого количества, но запускать каждые 5 URL одновременно?
Интересует в первую очередь CURL+PHP.
  • Вопрос задан
  • 279 просмотров
Пригласить эксперта
Ответы на вопрос 2
muzikant777
@muzikant777
PHP/Vue разработчик
Можете взять любой HTTP client, например, Guzzle.
Но, внутри он всё равно использует curl_multi_*.
use GuzzleHttp\Pool;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

$client = new Client();

$requests = function ($total) {
    $uri = 'http://127.0.0.1:8126/guzzle-server/perf';
    for ($i = 0; $i < $total; $i++) {
        yield new Request('GET', $uri);
    }
};

$pool = new Pool($client, $requests(100), [
    'concurrency' => 5,
    'fulfilled' => function ($response, $index) {
        // this is delivered each successful response
    },
    'rejected' => function ($reason, $index) {
        // this is delivered each failed request
    },
]);

// Initiate the transfers and create a promise
$promise = $pool->promise();

// Force the pool of requests to complete.
$promise->wait();


Ссылка на пример: docs.guzzlephp.org/en/stable/quickstart.html#concu...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы