Страница 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, да и вообще где либо. Я круто отстал от жизни МД...
массив выкинь его и в цикл пхп выкинуть
а по стоп все работает
в тлг многое уже обсуждено, это ночью прошлой ковырял