Завиток с многопоточностью

Я соскребаю данные с URL используя cURL

for ($i = 0; $i < 1000000; $i++) {

$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, 'http://example.com?page='.$i);
curl_exec($curl_handle);
curl_close($curl_handle);

// some code to save the HTML page on HDD
}

Я хотел знать, есть ли способ ускорить процесс? Может многопоточность? Как я мог это сделать?

0

Решение

cURL Multi не делает параллельные запросы, он делает асинхронные запросы.

До 5 минут назад документация была неправильной, для развертывания и перевода исправленной документации потребуется некоторое время.

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

Многопоточность — другой вариант, для этого требуется, чтобы у вас была многопоточная сборка PHP и установлено расширение pthreads.

Многопоточность имеет то преимущество, что вся обработка может выполняться для каждой загрузки и последующих действий параллельно, полностью используя все доступные ядра ЦП.

Что лучше, зависит в значительной степени от того, сколько обработки загруженных данных должен выполнить ваш код, и даже в этом случае это можно считать вопросом мнения.

2

Другие решения

Вы ищете curl_multi_* набор функций: «Позволяет параллельно обрабатывать несколько дескрипторов cURL».

Посмотрите на полный пример на curl_multi_init() страница.

Проверьте эти статьи для получения дополнительной информации о том, как curl_multi_exec() работает:

0

По вопросам рекламы [email protected]