Обработка текста - производительность Python и Perl [закрыто]

Вот мой скрипт на Perl и Python для простой обработки текста из примерно 21 файла журнала, каждый из которых около 300КБ к 1МБ (максимум) x 5 раз повторяется (всего 125 файлов, из-зажурнал повторяется 5 раз).

Код Python (код изменен для использования скомпилированногоre и с помощью)re.I

#!/usr/bin/python

import re
import fileinput

exists_re = re.compile(r'^(.*?) INFO.*Such a record already exists', re.I)
location_re = re.compile(r'^AwbLocation (.*?) insert into', re.I)

for line in fileinput.input():
    fn = fileinput.filename()
    currline = line.rstrip()

    mprev = exists_re.search(currline)

    if(mprev):
        xlogtime = mprev.group(1)

    mcurr = location_re.search(currline)

    if(mcurr):
        print fn, xlogtime, mcurr.group(1)

Код Perl

#!/usr/bin/perl

while () {
    chomp;

    if (m/^(.*?) INFO.*Such a record already exists/i) {
        $xlogtime = $1;
    }

    if (m/^AwbLocation (.*?) insert into/i) {
        print "$ARGV $xlogtime $1\n";
    }
}

И на моем компьютере оба кода генерируют точно такой же файл результатов из 10 790 строк. И вот время, сделанное на Cygwin 's Perl и Python реализации.

User@UserHP /cygdrive/d/tmp/Clipboard
# time /tmp/scripts/python/afs/process_file.py *log* *log* *log* *log* *log* >
summarypy.log

real    0m8.185s
user    0m8.018s
sys     0m0.092s

User@UserHP /cygdrive/d/tmp/Clipboard
# time /tmp/scripts/python/afs/process_file.pl *log* *log* *log* *log* *log* >
summarypl.log

real    0m1.481s
user    0m1.294s
sys     0m0.124s

Первоначально для этой простой обработки текста потребовалось 10,2 секунды с использованием Python и всего 1,9 секунды с использованием Perl.

(ОБНОВЛЕНИЕ) но после скомпилированногоre версия Python, теперь она занимает 8,2 секунды в Python и 1,5 секунды в Perl. Тем не менее Perl намного быстрее.

Есть ли способ улучшить скорость Python вообще ИЛИ очевидно, что Perl будет быстрым для простой обработки текста.

Кстати, это был не единственный тест, который я провел для простой обработки текста ... И каждый раз, когда я делаю исходный код, всегда Perl всегда побеждает с большим отрывом. И не раз Python выступал лучше для простогоm/regex/ совпадать и печатать вещи.

Пожалуйста, не предлагайте использовать C, C ++, Assembly, другие разновидности Python и т. Д.

Я ищу решение, использующее стандартный Python со встроенными модулями по сравнению со стандартным Perl (даже не используя модули). Мальчик, я хочу использовать Python для всех своих задач из-за его читабельности, но чтобы отказаться от скорости, я неЯ так не думаю.

Поэтому, пожалуйста, предложите, как можно улучшить код, чтобы получить сопоставимые результаты с Perl.

ОБНОВЛЕНИЕ: 2012-10-18

Как и предполагали другие пользователи, Perl имеет свое место, а Python - свое.

Таким образом, для этого вопроса можно с уверенностью заключить, что для простого регулярного выражения сопоставьте в каждой строке сотни или тысячи текстовых файлов и запишите результаты в файл (или распечатайте на экран),Perl всегда, всегда выигрывает в производительности для этой работы. Это так просто.

Обратите внимание, что когда я говорю, что Perl выигрывает в производительности ... сравниваются только стандартные Perl и Python ... не прибегая к каким-то непонятным модулям (неясным для обычного пользователя, такого как я), а также не вызывая C, C ++, библиотеки сборки из Python или Perl. Мы неУ нас нет времени, чтобы изучить все эти дополнительные шаги и установку для простого задания соответствия текста.

Итак, Perl отлично подходит для обработки текста и регулярных выражений.

Python имеет свое место, чтобы качаться в других местах.

Обновление 2013-05-29: Отличная статья, которая делает подобное сравнениеэто здесь, Perl снова побеждает при простом сопоставлении текста ... А для более подробной информации читайте статью.

Ответы на вопрос(5)

Ваш ответ на вопрос