Техническое. Почему Скиур иногда подтормаживает

Буквально несколько дней назад удалось выявить в Скиуре довольно неприятный баг и, частично его исправить. Проблема оказалась в том что мои предыдущие предположения что сервис подтормаживает на прогоне страницы по базе регулярных выражений, конечно были справедливы, но в значительной степени эту проблему удалось решить ещё раньше введя предварительную фильтрацию выражений  по принципам которые я у себя же тут в блоге описывал. Не универсальное решение, но всё же вполне оптимальное.

Текущая же проблема оказалась не столь очевидной, но не менее актуальной. К великому моему сожалению и удивлению Python не умеет сериализовывать скомпилированные регулярные выражения. Вернее он метит такие объекты как unmashalled и, в итоге, несмотря на наличие кода который подгружал базу регулярных выражений из кэша, на самом деле оказывалось что для каждой сессии, при подгрузке базы выражений из кеша, происходила полная их перекомпиляция, а это до нескольких секунд в зависимости от общей нагрузки на сервер.

Сейчас проблема решилась выносом кода подгрузки выражений из общей части в те участки где без базы выражений никак не обойтись — распознавание веб-страницы, во всех же случаях подгрузки данных из кеша более выражения не подгружаются. Загвоздка же в том что простого решения у этой проблемы нет.

В то же время есть варианты:

— либо компилировать выражения в C или Python код и подключить как уже готовые модули

— либо разрабатывать специальный сериализатор для регулярных выражений для Python ибо готовых нет

— либо выносить всю логику распознавания в отдельный сервер/сервис и обрабатывать все страницы в несколько потоков где выражения предварительно подгружены (самый простой способ)

— либо использовать для разбора веб-страниц не Python, а язык умеющий регулярные выражения сериализовывать

— либо отказаться от регулярных выражений и использовать иные правила анализа текстов.

Часть решений сугубо технические, часть алгоритмические. Какой подход проще уже понятно, непонятно какой лучше.

Как бы то ни было, есть и плюсы. Ключевой из которых в том что запас ускорения у Скиура ещё где-то 1000% и промышленный его вариант сможет быть очень быстрым.

About This Author

Яндекс.Метрика