Pull to refresh

Настоящая многопоточность в 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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.