pytest ловит исключение SystemExit
, что разумно, если подумать: если вы тестируете функцию, которая вызывает sys.exit
, вы не захотите, чтобы это завершило весь ваш набор тестов. [ 114]
Используйте pytest.exit
вместо sys.exit
, что сигнализирует о том, что вы хотите действительно завершить тестовый набор.
Perl является своевременным скомпилированным языком, таким образом, комментарии и POD не имеют никакого эффекта на производительность во время выполнения.
Комментарии и POD имеют крохотный эффект на время компиляции, но они так легки и быстры, чтобы Perl проанализировал, почти невозможно измерить хит производительности. Вы видите это для себя при помощи -c
отметьте, чтобы просто скомпилировать.
На моем MacBook программа Perl с 2 операторами и 1 000 строк 70 символьных комментариев занимает то же время для компиляции как один с 1 000 строк пустых комментариев как один со всего 2 операторами печати. Обязательно выполните каждый сравнительный тест дважды, чтобы позволить Вашей ОС кэшировать файл, иначе чего Вы сравниваете, время для чтения файла из диска.
Если время запуска является проблемой для Вас, это не из-за комментариев и POD.
Производительность во время выполнения? Нет.
Парсинг и lexing производительность?Да, конечно.
Так как Perl имеет тенденцию анализировать и закон на лету, затем комментирует, будет влиять на выполнение "запуска".
Они будут влиять на него noticably? Вряд ли.
Perl компилирует сценарий и затем выполняет его. Комментирует незначительно медленный фаза компиляции, но имейте нулевой эффект на фазу выполнения.
Модуль Сравнительного теста бесполезен в этом случае. Это только измеряет времена для выполнения кода много раз. Так как Ваш код ничего на самом деле не делает, большая часть из него оптимизирована он далеко. Вот почему Вы видите, что он выполняет 22 миллиона раз в секунду.
Я имею почти на всей главе об этом в Освоении Perl. Ошибка измерения в методе Сравнительного теста составляет приблизительно 7%. Ваши числа сравнительного теста хорошо в этом, таким образом, нет фактически никакого различия.
Точка: оптимизируйте узкие места. Чтение в файле состоит из:
Из этих шагов чтение является самой быстрой частью безусловно (я не уверен в закрытии, это - syscall, но Вы не должны ожидать его для окончания). Даже если это - 10% из всего этого (который является, не, я думаю), то сокращение его наполовину только дает 5% улучшенную производительность, за счет пропавших без вести комментариев (который является очень плохой вещью). Для синтаксического анализатора, выбрасывая строку, которая начинается с #, не материальное замедление. И после этого, комментариев не стало, таким образом, не может быть никакого замедления.
Теперь, предположите, что Вы могли на самом деле улучшить "чтение в сценарии" часть на 5% посредством разделения всех комментариев (который является действительно оптимистической оценкой, посмотрите выше). Насколько большой доля "чтения в сценарии" в полном потреблении времени сценария? Зависит от того, сколько это делает, конечно, но так как сценарии жемчуга обычно читают по крайней мере еще один файл, это - 50% самое большее, но так как сценарии жемчуга обычно делают что-то больше, честная оценка понизит это до чего-то в диапазоне 1%. Так, ожидаемое улучшение эффективности путем разделения всех комментариев - самое большее (очень оптимистические) 2,5%, но действительно ближе к 0,05%. И затем, это, где это на самом деле дает больше чем 1%, уже быстро, так как они почти ничего не делают, таким образом, Вы снова оптимизируете в неправильной точке.
Заключение, оптимизируйте узкие места.
Perl не является языком сценариев в том же смысле, который сценарии оболочки. Интерпретатор не читает файл линию за линией. Осуществление программы Perl сделано на двух основных этапах: компиляция и время выполнения [1]. Во время этапа компиляции исходный код анализируется и преобразовывается в байт-код. Во время этапа времени выполнения байт-код выполняется на виртуальной машине.
Комментарии замедлят этап парсинга, но различие незначительно по сравнению со временем, требуемым проанализировать сам сценарий (который является уже очень маленьким для большинства программ). В единственное время Вы действительно обеспокоены парсингом времени, находится в среде веб-сервера, где программу можно было назвать много раз в секунду. mod_perl существует для решения этой проблемы.
Вы используете Benchmark
.Очень хорошо! Необходимо искать способы улучшить алгоритм - не микрооптимизация. Devel:: DProf мог бы быть полезным для нахождения любых горячих точек. Вы абсолютно не должны разделять комментарии в дезинформированной попытке сделать Вашу программу быстрее. Вы просто сделаете это неудобным в сопровождении.
[1] Это обычно называют "как раз вовремя" компиляцией. Perl на самом деле имеет еще несколько этапов как INIT
и END
это не имеет значения здесь.
Я ожидал бы, что один комментарий только проанализировать однажды, не многократно в цикле, таким образом, я сомневаюсь, что это - допустимый тест.
Я ожидал бы, что комментарии будут немного медленная компиляция, но я ожидаю, что это было бы слишком незначительно, чтобы потрудиться удалять их.
Из комментария Paul Tomblins:
Разве жемчуг не делает своего рода непрерывной компиляции? Возможно, комментарии отбрасываются рано? –
Да Perl делает.
Это - язык программирования, промежуточный скомпилированный и интерпретируемый. Код компилируется на лету и затем работает. комментарии обычно не имеют никакого значения. Большинство, которое это, вероятно, произвело бы, - когда это первоначально анализирует файл линию за линией и пред компиляция его, Вы могли бы видеть нано второе различие.
Комментарии Perl замедляют сценарий? Ну, анализируя его, да. Выполнение его после парсинга его? Нет. Как часто сценарий анализируется? Только однажды, поэтому если у Вас есть комментарий в для цикла, комментарий отбрасывается синтаксическими анализами однажды, прежде чем сценарий даже будет работать, после того как он начал работать, комментария уже не стало (и сценарий не хранится как сценарий внутренне Perl), таким образом неважно, сколько раз для повторений цикла, комментарий не будет иметь влияния. Как быстро синтаксический анализатор может перескочить через комментарии? Путем комментарии Perl сделаны, очень быстро, таким образом я сомневаюсь, что Вы заметите. Вы заметите более высокое время запуска, если у Вас будет 5 строк кода и между каждой строкой 1 строка Mio комментариев..., но как, вероятно, то, что и того, чем использование было бы комментарий что большой быть?