waLongAction - 4 секунды на ветер?
Добрый день.
Реализуем waLongAction по https://developers.webasyst.ru/cookbook/basics/cla... для тестов сделали в функции step просто увеличение счетчика:
$this->data['offset'] += 1;
и обнаружили что время выполнения заглушки составило 4 секунды!
Посмотрев файл waLongActionController насторожило большое кол-во sleep usleep, залогировали каждый вызов и оказалось что тормозит функции sleep в 733 строке:
Но скорее всего пост будет просто информационным, так как покопавшим в коде обнаружили что это следствие самого механизма и связано с "недоверием" "локерам" при первом запуске )
9 ответов
У Вас код какой-то левый - устаревший или измененный. В текущей версии waLongActionController "sleep(1);", а там где usleep стоит проверка по параметру который мы можем изменять:
проверили, все обновленное
wa-system/controller/waLongActionController.class.php (чуть нумерация сбилась из-за дебага, а так код идентичный)
а то что вы приводите это 416 строка
понял, по поводу Вашего куска:
можно просто метод переопределить
вообще по хорошему надо в код WA добавить проверку
т.к. проблема флокинга акуальна только на винде. Я бы послал PR, но WA игнорит все PR с изменениями.
Да если переопределить то задержки нет, но сомневаюсь что модераторы такое пропустят) хотя попробовать можно
И с PR полностью согласен, уже даже не пытаемся ничего отправлять
В смысле модераторы не пропустят? В своих классах Вы можете переопределять любые не private\final методы
Вы готовы к последствиям не сработавшей блокировки и запуску десятков параллельных тяжеловесных процессов?
Нет конечно! а к чему вопрос?
Размещая информацию, я не ждал для нее решения (хотя спасибо info@ravencode.ru некое решение есть), а для составления некой базы по проблемам, чтобы если у кого возникнет похожая проблема, было известно из-за чего она, и не было потрачено уму времени чтобы понять так и должно быть или где-то ошибка.
P.S. кстати, тут у вас недостоверная информация https://developers.webasyst.ru/cookbook/basics/cla... если делать все как по инструкции не получится желаемого результата, в блоке //первый запуск скрипта нужно вызывать две функции step с разным интервалом, тогда один останется постоянно висеть в качестве рабочего процесса, а второй запустить цикл информационных запросов.
ну и будет отдаваться через раз инфа, пока раннер работает
Такие сообщения лучше оформлять с типом "Отчет об ошибке".