Реализация многопоточности в PHP
Наткнулся на скрипт для реализации многопоточности с помощью неблокирующихся сокетов в PHP: http://www.stableversion.com/2006/04/17/multithread-php/. Пока не пробовал, но реализация интересная, и по видимому "самая правильная".
У меня сейчас есть только один мощный скрипт, который фигачит в многопоточном режиме - всё работает следующим образом: раз в минуту curl'ом запускается скрипт лаунчера, который иницилизирует и запускает нужное кол-во потоков с помощью curl'а. Потоки отрабатывают (ограничение по времени работы - минута) и сами отмирают. Схема пусть чуть корявая, но придуманная опытным путём, и у неё есть одно неоспоримое преимущество: если сервер упадёт, то сразу как он заработает, система сама запустится и будет фигачить дальше как не бывало. Пока переделывать всё это нет никакого желания =)
2 комментария:
А пример можешь показать, как контролировать число потоков?
Очень примерно
for($i=1; $i<=$limit; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$str = curl_exec($ch);
curl_close($ch);
} //for
$limit - это кол-во потоков, при такой схеме 30-50
$url - это путь к файлу процесса (отдельного потока), я ему передаю определённые параметры, и он делает то что нужно, у скрипта потока стоит ограничения выполнения по времени 30-45 секунд
Сам скрипт вызывается каждую минуту
Получается каждую минуту у нас создаётся $limit потоков
Отправить комментарий