использовать exec или pntcl?

Rasta

Guest
использовать exec или pntcl?

Господа подскажите пожалуйста.

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

Использовал бы curl_multi_add_handle, но нельзя поставить php5.

Я вижу два решения проблемы, но:
1. pntcl - по документации на сайте не понимаю как это работает. Кто-нибудь может помочь примером или кинуть ссылку на туториал или топик в каком-нибудь зарубежном форуме (на пхпклаб нет ничего)?

2. Скрипт будет на отдельном сервере, памяти 512 мб. Сколько копий php я могу запускать через exec()? Сколько памяти занимает копия php? Синхронизацию работу решу через дополнительные поля в таблице бд.

Заранее спасибо!

ps: Предвидя вопрос - зачем. Не смейтесь, но это для поисковой системы на дипломный проект... большая часть будет потом переписана на другой язык. Просто пока все на пхп и часть на Си.
 

nikit87

Новичок
Rasta
Сделал поисковик сам недавно. все на пхп.
Делал индексацию не всех сайтов сразу а по крону один сайт в 15 минут. и нормально))

-~{}~ 23.06.05 02:08:

канечно не очень крутой но ищет все правильно))

-~{}~ 23.06.05 02:09:

Это я к тому что не стоит индексировать все сайты одновременно
 

Rasta

Guest
nikit87, меня интересуют ответы на поставленные вопросы. Можете помочь?

Обсуждать алгоритм работы своего поисковика желания нет.
 

nikit87

Новичок
большая часть будет потом переписана на другой язык. Просто пока все на пхп и часть на Си.
Ага. ты сначала на питоне сделай, потом на jave, потом на пхп и тока потом на том языке, который хочешь. Дипломную работу вовремя выполнишь.
Запросов очень много, полчается что скрипт работает очень медленно именно из-за количества запросов, кот-х тысячи.
Тысячи в день? час? неделю? минуту? в месяц? конкретнее.
 

Rasta

Guest
Tor, а что с вопросами не так? В гугле я искал разумеется и форумы смотрел. По информации в php.net мне не разобраться как работает pcntl. Поэтому я и просил конкретную ссылку.

И у меня нет доступа к шеллу, ps не могу использовать. Поэтому здесь и спрашиваю. Может кто-нибудь знает?

nikit87, в час.
Сейчас интересует пхп, поэтому сюда и пишу.
 

Tor

Новичок
И у меня нет доступа к шеллу, ps не могу использовать
ну, на нет и суда нет
процесс может занимать места от пары метров до десятков в зависимости от массы параметров
и никто тебе угадать не поможет
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
В принципе ты можешь всё вручную сделать. Открываешь соединение, посылаешь заголовки.
Не дожидаясь ответа открываешь следующее соединение, посылаешь заголовки, и т.д. Потом считываешь чего они насобирали по очереди. Ну или примерно так.
 

svetasmirnova

маленький монстрик
Rasta
Так как из вопроса не видно что именно непонятно, расскажу про свои трудности.

Возьмём пример из [m]pcntl_fork[/m] и чуть подробнее его прокомментируем
PHP:
//определяем окружение (переменные, константы)
$pid = pcntl_fork(); // можно их много создать: в цикле, например
if ($pid == -1) {
     die("could not fork");
} else if (!$pid) {
     // we are the child
     // основное отличие от [m]exec[/m]
     // в том, что child наследует всё окружение родителя
} else {
     // we are the parent
     // тут всё понятно, я думаю
     // можно сделать что-нибудь
}
>И у меня нет доступа к шеллу, ps не могу использовать
Что значит нет? Компьютер личный есть? cygwin поставь и пользуйся маном;)
 

Tor

Новичок
>И у меня нет доступа к шеллу, ps не могу использовать
Что значит нет? Компьютер личный есть? cygwin поставь и пользуйся маном
svetasmirnova, это не ответит на вопрос
Сколько памяти занимает копия php?
на сервере

Rasta
exec("ps bla-bla",$t1,$t2);
 

stalxed

Новичок
//определяем окружение (переменные, константы)
$pid = pcntl_fork(); // можно их много создать: в цикле, например
if ($pid == -1) {
die("could not fork");
} else if (!$pid) {
// we are the child
// основное отличие от exec
// в том, что child наследует всё окружение родителя
} else {
// we are the parent
// тут всё понятно, я думаю
// можно сделать что-нибудь
}

НЕ понятно как на базе этого сделать многопоточность? создать циклом куча переменных ($pid = pcntl_fork();)
а потом если циклом проделывать if ($pid == -1) {
die("could not fork");
} else if (!$pid) {
// we are the child
// основное отличие от exec
// в том, что child наследует всё окружение родителя
} else {
// we are the parent
// тут всё понятно, я думаю
// можно сделать что-нибудь
}) то не получается никакой многопоточности!

-~{}~ 20.07.06 22:17:

и как же на базе pcntl_fork её организовать плиз кто-нибудь дайти простенький рабочий пример, погуглил но толком ничего не нашёл...
 

svetasmirnova

маленький монстрик
st@l][ED
Два вопроса:
1. Зачем задаёшь вопрос в теме, о которой все забыли год назад, а не открываешь новую?
2. Что в твоём понимании многопоточность?
 

insidex

флихтэръер
Извините, не удержался :)

по теме, ни у кого не завалялось библиотеки async_sockets.phps ? Крайне нужна.
 

stalxed

Новичок
2 svetasmirnova
1 чтобы не флудить
2 когда несколько задач выполняются паралельно
 

svetasmirnova

маленький монстрик
st@l][ED
1. Это не флуд. У тебя другая проблема, чем у автора. И ответ на подобную проще найти, если будет отдельная тема с выразительным названием.

2.
> НЕ понятно как на базе этого сделать многопоточность? создать циклом куча переменных ($pid = pcntl_fork()
> а потом если циклом проделывать if ($pid == -1) {
Почему бы и нет?
PHP:
for ($i = 0; $i < 10; $i ++) {
// что я там год назад написала
}
А вообще зависит от того, что зачем эти процессы (не потоки!, в гугл за разницей) должны выполняться параллельно: от бизнес-логики приложения.
 
Сверху