|
|
|
| В общем суть такова...
Есть скрипт, который должен работать практически все время... Берет порцию данных - обрабатывает и должен ВЫГРУЗИТЬСЯ, запустив себя самого же в другом потоке (делается это, дабы сервак не убил скрипт по тайму или по использованию памяти)...
- Крон не подходит, т.к. один поток скрипта должен ОБЯЗАТЕЛЬНО завершить свою работу до запуска следующего потока (разделяемые ресурсы с монополным доступом)
- инклюдить тоже (думаю все понимают, что это рекурсивный бесконечно разрастающийся ОДИН процесс)
- через "eval" и т.п. - вариант возможный, но код скрипта должен совершенно не зависеть от папки, хостинга (Вынь/Юних)
... какие есть варианты ??? =) | |
|
|
|
|
|
|
|
для: ZuArt
(04.04.2007 в 14:56)
| | Ограничение по времени выполнения скрипта вводятся как раз для того, чтобы таких скриптов не было - если его нельзя обойти - скрипт рано или поздно пректит свою работу. В время выполнения скрипта не входит время затрачиваемое на загрузку данных из сети и обращение к базе данных. Поэтому рационально ввести два потока - один качает, другой время от времени просывается (по cron) и обрабатывает, что первый накачал... Первый скрипт будет всё равно заканчиваться рано или поздно по таймауту и его всё равно придётся перезапускать по cron. | |
|
|
|
|
|
|
|
для: cheops
(05.04.2007 в 01:12)
| | рационально ввести два потока
пускай даже и так... НО... первый то скрипт должен постоянно качать данные и "складировать" их в храничище (пускай даж и временное)... а при работе второго, тот должен забирать эти данные... вот вопросы сразу встают
- первый должен пахать и пахать
- при запуске второго, первый должен "уснуть", чтобы второй мог забрать и обработать данные, накаченные первым. | |
|
|
|
|
|
|
|
для: ZuArt
(05.04.2007 в 16:27)
| | А так:
if (!isset($_GET['s'])) {
//закачать порцию данных
echo "<head><meta http-equiv="Refresh" content="0; url=http://url.php?s=1"></head>" ;
}else{
//обработать порцию данных
echo " <head> <meta http-equiv="Refresh" content="0; url=http://url.php"> </head>" ;
};
|
| |
|
|
|
|
|
|
|
для: ZuArt
(05.04.2007 в 16:27)
| | Обычно один процесс пополняет очередь, а другой её разгребает.
При этом они оба работают параллельно и независимо друг от друга.
Единственное пересечение при добавлении/изъятии элемента в.из очереди решается организацией критической секции строго на момент операции с очередью. Все остальное всремя процессы друг-другу никак не мешают. | |
|
|
|