следим за процессом - решение....

GrayMaster

Новичок
следим за процессом - решение....

Добрый день !
такая задача - выполняется несколкьо процессов одновременно, нужно прослеживать не обрываются ли они, и если обрываются - то продолжать выполнение с места обрыва.
Я делаю в mysql таблицу с 3-я полями - время последней операции - time(), id процесска (образно), и позиция выполнения..
При одновременнол работе 5-и и более процессов - идёт сильная нагрузка на сервер, за счёт постоянного обновления таблицы...

Подскажите пожалуйста лучшее решение это ситуации.
Спасибо.
 

kvf77

Red Devil
GrayMaster

пиши в сессию - каждому процессу создай свою ветку массива или переменную
 

kruglov

Новичок
или пишите в базу результаты пореже, повторение пятисекундной работы - это некритично.
 

GrayMaster

Новичок
пиши в сессию - каждому процессу создай свою ветку массива или переменную
Имеется ввиду что 1 процесс - 1 запуск скрипта. Т.е. тут не многопоточность внутри одного скрипта...
 

Necromant

Новичок
serialize

PHP:
class Big () {
   function __countruc() {
      unserialize(file_get_content('some.file'))
  }

    function __toString() {
       return  serialize($this); 
   }

   function __destruct() {
       file_put_cintent('some.file', serialize($this));
   }
}
 

GrayMaster

Новичок
т.е. данные о всех процессах будут храниться в файле !?
а не случится ли сбой при чтении если открывать файл юзая flock, LOCK_EX затем писать туда, потом LOCK_UN ?
 

kvf77

Red Devil
GrayMaster

расскажи нам лучше что у тебя там за процессы такие растакие постоянно виснущие? что они делают, что тебе надо ежесекундное состояние хранить?
 

whirlwind

TDD infected, paranoid
Я делаю в mysql таблицу с 3-я полями - время последней операции - time(), id процесска (образно), и позиция выполнения..
Я бы сделал так: В отдельном каталоге только запущенный процесс создает pid-файл, при чем сам идентификатор используется в качестве имени файла. В файл регулярно записыватся позиция выполнения, с последующим обрезанием (если нужно) и флюшем (или отключить буфферизацию вывода). При этом обновляется время доступа файла (которое можно легко получить). Если процесс работает и файл открыт, то залочить его эксклюзивно проверяющая программа не сможет (не помню, меняется ли при этом время доступа). Для надежности проверяем статус процесса посредством posix_kill (если он доступен) с нулевым сигналом. Если процессс дохлый, то получаем время последнего изменения файла и читаем содержимое ака позиция выполнения. Удаляем файл, запускаем новый процесс. Должно работать гораздо быстрее + необязательно наличие БД.

PS. Не знаю как на PHP с сигналами, но в perl обработчик на SIGCHLD вешается легким движением руки. Если так можно сделать и в PHP, то много кода автоматически улетучится.
 

Necromant

Новичок
2whirlwind , в таком случае , уже проще , Shaerd Memory & Semafor или FIFO каналы.
 

whirlwind

TDD infected, paranoid
Не... shared mem не проще, а FIFO проблемы с взаимными блокировками. Вообщем то можно, но это если трудности не пугают.
 
Сверху