Как повысить скорость обработки файла с использованием регулярного выражения, которое занимает больше процессорного времени с помощью pypy?

#python #pypy

#python #pypy

Вопрос:

При чтении текстового файла журнала (postfix logs) мне нужно проверить определенные шаблоны для разделения строки / разделения строки для сохранения значений атрибутов в каждой строке текстового файла журнала. Следовательно, используйте метод регулярного выражения ‘re.search’ следующим образом:

                 if (re.search(' msn$', line)):
                    line2  = line.partition('...')[2].split('n')[0]
                    break
  

Эквивалентен ли этот код:

                 if ' msn' in line:
                    line2  = line.partition('...')[2].split('n')[0]
                    break
  

Улучшит ли последний код скорость выполнения кода python?
Как можно улучшить обработку файла, если необходимо выполнить множество таких поисков по шаблону, а значения обновляются в таблице postgres каждый день с повышенной скоростью. Каждый день у нас есть около 300000 записей для хранения, грубо говоря, для чтения текстового файла размером 1474175681 байт каждый день. В настоящее время это занимает 100% процессора и тоже не быстро. Как я могу оптимизировать код? Большая часть кода просто проверяет определенные ключевые слова в строке файла и обрабатывает аналогично приведенному выше коду.

Ответ №1:

Вы должны использовать line.endswith(' msn') , который полностью эквивалентен re.search(' msn$', line) и намного быстрее.

Ответ №2:

Самый быстрый код — это код, который вы не выполняете. Переосмыслите рабочий процесс проблемы и избегайте извлечения текста из базы данных только для его обработки в python.