Паралельное исполнение функции в php

177
06 сентября 2018, 23:50

Интересует как запустить выполнения функции паралельно внутри другой функции. Если я захожу на ссылку site.com/action/?from=0&to500 то сайт запускает функцию которая запускает другую функцию. Сама функция парсит страницы. Так как страницы долго грузить то за одно выполнение скрипта получаеться парсить только 500 страниц. Но если я запущу данную ссылку с изменением from-to на другие параметры в 20 вкладках. То все вместе парсит быстро. То-есть скрипт запускаетсья паралелньо. Как можно симулировать в PHP такой же процесс внутри кода?

Answer 1

Вариантов несколько, самый правильный: погуглить в сторону асинхронного выполнения.

Второй вариант, посмотреть свой парсер, возможно его можно переделать.

Третий вариант, скорей костыльный, но вы можете получать ?from=0&to500 разбивать его на несколько частей, например если на 2, то: ?from=0&to250 и ?from=251&to500 и запросить эти пути без времени ожидания.

И запустить 2 курла (а лучше используя multi_curl), с параметрами без ожидания, типа такого:

$URL = 'http://site.com/action/?from=0&to250';
$CURL= curl_init();
curl_setopt($CURL, CURLOPT_URL, $URL);
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($CURL, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($CURL, CURLOPT_TIMEOUT_MS, 100);
curl_setopt($CURL, CURLOPT_CONNECTTIMEOUT_MS, 100);
curl_exec($CURL);
curl_close($CURL);

и так-же для второй ссылки, если много и динамически, значит циклом запускаем (а еще лучше юзать multi_curl)

Answer 2

Простейший это использовать вызов с помощью большого количества запросов, грубо говоря на самого себя делать какое-то N раз запрос в котором парситься следующая часть страницы.

Можно посмотреть в сторону многопоточности в виде pThreads Что позволит одним скриптом выполнять большее количество раз парсинг параллельно и именно по настоящему параллельно. pThreads.

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

READ ALSO
Как сделать вывод текста при удачной отправки формы и заблокировать поля?

Как сделать вывод текста при удачной отправки формы и заблокировать поля?

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

223
Рандомная замена

Рандомная замена

Массив $arrtxt сравнивается по значению с массивом $new по ключу который также содержит в себе массив с ключами и после рандомно выводится рядом...

254
Отправка смс сайта на почту используя Codeigniter 3

Отправка смс сайта на почту используя Codeigniter 3

Использую codeigniter 3И мне нужно сделать отправку с формы смс на почту @gmail

199
php преобразование чисел со степенью

php преобразование чисел со степенью

Есть числа со степенью в таком формате 2401E-5 Как их можно преобразовать в десятичные числа если степени будут постоянно меняться?

210