Страница 4 из 6

Re: Периодически запуск сценариев

Добавлено: Вт июн 02, 2020 8:23 pm
Logrus
анекдот вспомнился
- почему киты выбрасываются на берег?
- а им кто-то сказал, что они тоже млекопитающие...

Re: Периодически запуск сценариев

Добавлено: Ср июн 03, 2020 10:27 am
skysilver
Bagir писал(а):
Вт июн 02, 2020 7:12 pm
Через БД, по сути это почти тоже самое что использовать штатную getGlobal()
По сути да, но gg() это лишние запросы и нагрузка.

Лучше использовать очередь сообщений - таблица operations_queue (с типом MEMORY, т.е. висит она в оперативке).

Добавить в очередь:

Код: Выделить всё

addToOperationsQueue('queue_name', 'dataname', 'datavalue');
Взять из очереди и очистить:

Код: Выделить всё

$operations=checkOperationsQueue('queue_name');
Насчет сокетов. Не нужно путать МДМ-шные вебсокеты (циклы cycle_websocket, cycle_wscache) с обычными сокетами - socket_create(), socket_listen(), stream_select() и т.д.

Re: Периодически запуск сценариев

Добавлено: Ср июн 03, 2020 7:36 pm
Bagir
skysilver писал(а):
Ср июн 03, 2020 10:27 am
Лучше использовать очередь сообщений - таблица operations_queue
Вот сколько уже лет с Алисой, но с таблицей operations_queue ещё не работал. Похоже это самое то, и даже без нагромождения своего кода. Спасибо за совет, сейчас думаю, куда бы ещё применить этот инструмент.
Сокеты действительно можно использовать напрямую для этой задачи. Я как то не подумал об этом, хоть только что использовал их для отправки сообщений в свою программу для музыки и чтения сообщений. Как то сокеты у меня больше с сетевыми запросами ассоциируются, но почему бы и нет.
Если сегодня доберусь, попробую с таблицей operations_queue. А там посмотрим.

Re: Периодически запуск сценариев

Добавлено: Ср июн 03, 2020 7:45 pm
Bagir
Не нашел никакой инфы по функции для очереди addToOperationsQueue. Полез разбираться в php коде.

Re: Периодически запуск сценариев

Добавлено: Ср июн 03, 2020 8:41 pm
Logrus
Bagir писал(а):
Ср июн 03, 2020 7:45 pm
Не нашел никакой инфы по функции для очереди addToOperationsQueue. Полез разбираться в php коде.
а ее никто, кроме пу не использует и при добавлении пять аргументов, последние два очень существенны (но не обязательны) ...
а так просто все

Re: Периодически запуск сценариев

Добавлено: Чт июн 04, 2020 12:55 pm
Bagir
Вот такой вопрос: файл threads.php отвечает за запуск и остановку циклов. Код функции closeThread($id):

Код: Выделить всё

   public function closeThread($id) {
      $pstatus = proc_get_status($this->handles[$id]);
      $pid = $pstatus['pid'];
      $cmd = $pstatus['command'];
      DebMes("Closing thread $pid ($cmd)",'threads');
/* */      if (!proc_terminate($this->handles[$id])) {
/* */         DebMes("Cannot close process $pid ($cmd) with proc_terminate",'threads');
         if (IsWindowsOS()) {
            $exec_str="taskkill /F /T /PID $pid";
         } else {
            $exec_str="kill -9 $pid";
         }
         DebMes("Executing: ".$exec_str,'threads');
         $output = array();
         $result = exec($exec_str,$output);
         DebMes("Result: ".implode("\n",$output),'threads');
         
/* */      } else {
/* */         DebMes("Process $pid ($cmd) closed with proc_terminate",'threads');
/* */      }
         
   }
Кто в курсе, почему для закрытия процесса отказались от функции proc_terminate? У меня под виндой вроде хорошо работает. А вот taskkill просит библиотеку, которую я ни как не могу прикрутить. Ругается на не найденную точку входа. С библой наверное можно разобраться, но мне интересно, почему ушли от proc_terminate. Вроде как правильней закрывать процесс ею, если он был открыт через proc_open.

Re: Периодически запуск сценариев

Добавлено: Чт июн 04, 2020 7:04 pm
xor
Bagir писал(а):
Чт июн 04, 2020 12:55 pm
Вот такой вопрос: файл threads.php отвечает за запуск и остановку циклов. Код функции closeThread($id):

Код: Выделить всё

   public function closeThread($id) {
      $pstatus = proc_get_status($this->handles[$id]);
      $pid = $pstatus['pid'];
      $cmd = $pstatus['command'];
      DebMes("Closing thread $pid ($cmd)",'threads');
/* */      if (!proc_terminate($this->handles[$id])) {
/* */         DebMes("Cannot close process $pid ($cmd) with proc_terminate",'threads');
         if (IsWindowsOS()) {
            $exec_str="taskkill /F /T /PID $pid";
         } else {
            $exec_str="kill -9 $pid";
         }
         DebMes("Executing: ".$exec_str,'threads');
         $output = array();
         $result = exec($exec_str,$output);
         DebMes("Result: ".implode("\n",$output),'threads');
         
/* */      } else {
/* */         DebMes("Process $pid ($cmd) closed with proc_terminate",'threads');
/* */      }
         
   }
Кто в курсе, почему для закрытия процесса отказались от функции proc_terminate? У меня под виндой вроде хорошо работает. А вот taskkill просит библиотеку, которую я ни как не могу прикрутить. Ругается на не найденную точку входа. С библой наверное можно разобраться, но мне интересно, почему ушли от proc_terminate. Вроде как правильней закрывать процесс ею, если он был открыт через proc_open.
странно, что у вас тасккилл ругается, она же идет как команда ос, начиная с хр. Может, у вас что-то с дистрибутивом?
ps TSKILL ещё есть для многопользовательских систем

Re: Периодически запуск сценариев

Добавлено: Чт июн 04, 2020 8:17 pm
Bagir
xor писал(а):
Чт июн 04, 2020 7:04 pm
она же идет как команда ос, начиная с хр. Может, у вас что-то с дистрибутивом?
Похоже на то. Или какая-нибудь зараза приволокла и прописала другую версию этой библы. Вечерком попробую восстановить стандартные библиотеки.
Мне больше покою не дает вопрос, почему отказались от функции proc_terminate. Сегодня буду пробовать с ней играться.

Re: Периодически запуск сценариев

Добавлено: Чт июн 04, 2020 8:50 pm
Bagir
Вот только ещё один момент, на моем пути к теме топика. Ранее не написал, думал что грабли лежат на траве, а нет, спрятаны. Когда я жму кнопку Stop в xray -> Services, циклы успешно останавливаются, но затем сразу стартуют по новой. Похоже куда то переехали правила авторекавери.

Что то я дольше даже не наблюдаю участие массива $restart_threads из config.php в cycle.php, да и вообще где либо. Я круто отстал от жизни МД...

Re: Периодически запуск сценариев

Добавлено: Чт июн 04, 2020 9:24 pm
Logrus
Bagir писал(а):
Чт июн 04, 2020 8:50 pm
Вот только ещё один момент, на моем пути к теме топика. Ранее не написал, думал что грабли лежат на траве, а нет, спрятаны. Когда я жму кнопку Stop в xray -> Services, циклы успешно останавливаются, но затем сразу стартуют по новой. Похоже куда то переехали правила авторекавери.

Что то я дольше даже не наблюдаю участие массива $restart_threads из config.php в cycle.php, да и вообще где либо. Я круто отстал от жизни МД...
массив выкинь его и в цикл пхп выкинуть
а по стоп все работает

в тлг многое уже обсуждено, это ночью прошлой ковырял