Как стать автором
Обновить

Настоящая многопоточность в PHP

image

Здравствуйте, дорогие пользователи Хабрахабра.

В одном из проектов мне понадобилось спарсить целый сайт, но страниц было настолько много, что парсер работал бы почти сутки.
И тогда меня посетила мысль — почему бы не реализовать всё на потоках? Поискав в интернете реализации многопоточности для 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
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.