Здравствуйте, дорогие пользователи Хабрахабра.
В одном из проектов мне понадобилось спарсить целый сайт, но страниц было настолько много, что парсер работал бы почти сутки.
И тогда меня посетила мысль — почему бы не реализовать всё на потоках? Поискав в интернете реализации многопоточности для PHP, я нашёл один шлак, и расстроился.
Но я не их тех, кто останавливается перед преградой — я твёрдо решил написать свою многопоточность, что бы мне это не стоило.
И вот, спустя двух дней мучений — я реализовал, не побоюсь этого слова, лучшее решение многопоточности для PHP.
Мой класс не требует особых прав, и работает на любом хостинге, который поддерживает curl.
Что из себя представляет это решение?
Это обычный класс, который подключается к любому скрипту, и даёт возможность использовать многопоточность где угодно — в циклах, или в любых местах.
require_once 'lib/Threads.php';
Потоки создаются следующим образом:
$Thread->Create(function(){
sleep(5);
echo 'Sleep 5';
});
$Thread->Create(function(){
sleep(5);
echo 'Sleep 5';
});
А запускаются командой
$Thread->Run();
Например, следующий код:
$Thread->Create(function(){
sleep(5);
echo 'Sleep 5';
});
$Thread->Create(function(){
sleep(2);
echo 'Sleep 2';
});
$Thread->Create(function(){
sleep(3);
echo 'Sleep 3';
});
$Thread->Run();
Проработает не 10 секунд, а всего 5 (время выполнения самого долгого потока).
Так же, возможно отключить вывод результатов (echo), чтобы получать только возвращаемые данные:
print_r($Thread->Run(false));
Скачать класс можно по ссылке:
rghost.ru/51023910