заменил им старый. И тут понеслись какие-то странные непонятные глюки. Яоткатился, проверил еще десять раз, что работа парсера валидна. Вкатился - опять глюки.
Начинаю разбирать проблему.
1. Профайлинг обоих парсеров показывает стабильно, что новый работает в два раза быстрее старого при одинаковых датасетах в районе 1-2М строк.
2. При включенном новом парсерее вся система работает МЕДЛЕННЕЕ примерно на 20 микросекунд.
3. При старом парсере апи + ангуляры работают корректно.
4. При новом они начинают как-то люто подтормаживать с задержками более секунды и потом пачками события уходить в статус pending
5. Парсер никакого отношения к апи и ангулярам не имеет. Он вообще другим занимается, куда не лезет.
6. netstat показывает, что от количества открытых соединений глюки не зависят.
7. Отладочная информация со стороны бэка(пехепе) показывает весьма непонятные результаты, в которых в принципе ничего военного. Те же разбросы по микросекундам.
а профайлинг всей системы почему бы не сделать?
Так чем дело-то закончилось?
Кстати, пока возился со своим парсером и тюнил его, курил всякие хай перфоманс для петона. И наткнулся на фразу чет в стиле ну всем математикам очевидно, почему dict.has_key говно . Блин, я не математик, мне чет неочевидно(((((((((((
В общем, фронт точно выяснил, что он не при делах. Завтра еще раз посмотрю парсер, если не справлюсь, покажу - мож кто поможет. Блядь, да там по сути нихуя военного: При инициализации класса объявляем словарь. По ряду условий сплитим и обновляем словарь. Когда событие в словаре комплитед, то возвращаем его через переменную, а сам словарь обнуляем. ПО сравнению со старым алгоритмом, развница в одном апдейте
@Saluev Йя нашель! Ох, прорыли ангулярь, пехепе, апачи, сеть, odbc, чутка редиску, петоны в хвост и в гриву профайлером - ну всё плюс минус одинаково, а лаг есть, причем оно еще странно нестабильный. То есть, то его нет. В итоге всё оказалось просто донельзя: Старый парсер ориентировался по пустой строке. Если она есть, значит событие сформировано - ретюрн. Новый - по следующему ивенту (еще выше писал, что пустая строка не подходит). Сформировали, если видим следующее событие, отдать, очистить, формируем новое. Но что будет если нового события нет?🤔🤔😔 Правильно - Парсер будет его ждать, чтобы отдать предыдущее. Это и есть лаг. В тестах он не был заметен и вооще не был заметен так как при даже минимальной относительно работе событий валится дохренища в секунду. А тут попадаю на простой - и сразу всё стало ясно.
Обсуждают сегодня