многопоточность в пхп

Статус
В этой теме нельзя размещать новые ответы.

zaartix

Постоялец
Регистрация
15 Май 2006
Сообщения
73
Реакции
27
Господа, вот столкнулся с такой проблемой, пишу индексатор на пхп, в один поток индексировать - это довольно тормозно. Может кто уже сталкивался с подобными проблемами? как решали?

модераторам:
в правилах раздела указана эта тема в качестве примера, однако ответа на этот вопрос я так и не нашел :(
 
Господа, вот столкнулся с такой проблемой, пишу индексатор на пхп, в один поток индексировать - это довольно тормозно. Может кто уже сталкивался с подобными проблемами? как решали?

модераторам:
в правилах раздела указана эта тема в качестве примера, однако ответа на этот вопрос я так и не нашел :(

Основной php файл, который запускает другие на фоне:

PHP:
<? // index.php
system('php -f thread1.php &');
system('php -f thread2.php &');
?>
 
почитай:
*** скрытое содержание ***

Там все на сокетах. Странно...

PHP:
<? // index.php 
system('php -f thread1.php &'); 
system('php -f thread2.php &'); 
?>

ведь так намного элегантнее, тем более можно параметры передавать свои скрипту
 
Ну можно конечно и fork'аться все время, стартонуть сотню php-интерпретаторов параллельно, процессов апача еще туда же, и в них потом друг другу кидать сообщения через файлы. Но не думаю, что это можно назвать "элегантно".

Вот правильный многопоточный спайдер:

PHP:
//Author: Esrun - http://www.onlinehoster.com

$urls = array("http://www.google.com",
"http://www.yahoo.com", 
"http://www.msn.com", 
"http://www.ask.com",
"http://www.esrun.co.uk", 
"http://www.onlinehoster.com");

$socketh = curl_multi_init();

foreach($urls as $i => $url){
  $socket[$i] = curl_init($url);
  curl_setopt(
     $socket[$i], CURLOPT_RETURNTRANSFER, 1);
  curl_setopt(
     $socket[$i], CURLOPT_FOLLOWLOCATION, 1);
  curl_multi_add_handle($socketh, $socket[$i]);
}

do { 
   $x = curl_multi_exec($socketh, $working); 
} while ($working);

foreach($urls as $i => $url) {
  $data[] = curl_multi_getcontent($socket[$i]);
  curl_close($socket[$i]);
}

print_r($data);
Да, он на сокетах :)
 
А если не спайдер нужен, а, к примеру, по окончании работы скрипта статистику собрать? Как тогда отпочковать поток, чтобы текущий скрипт завершил работу и не заставлял больше юзера ждать?
 
Закрыто. В поиск.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху