2015-01-13 4 views
1

Я поддерживаю проект как на python2, так и на python3, и заметил, что интерпретатор python3 занимает почти в 3 раза больше времени, чем загрузка в качестве интерпретатора python2.Почему python3 занимает вдвое больше времени, чем загружает python2?

(Запуск на Arch Linux)

$ cat hello.py 
print('Hello World!') 
$ python -V 
Python 3.4.2 
$ time python hello.py 
Hello World! 

real 0m1.561s 
user 0m1.290s 
sys  0m0.110s 
$ python2 -V 
Python 2.7.9 
$ time python2 hello.py 
Hello World! 

real 0m0.613s 
user 0m0.513s 
sys  0m0.070s 

И еще раз без каких-либо кода:

$ rm foo ; touch foo ; time python foo ; time python2 foo 

real 0m1.710s 
user 0m1.297s 
sys  0m0.103s 

real 0m1.040s 
user 0m0.667s 
sys  0m0.100s 
$ echo $PYTHONSTARTUP 

$ rm foo ; touch foo ; time python -B foo ; time python2 -B foo 

real 0m1.554s 
user 0m1.117s 
sys  0m0.123s 

real 0m0.678s 
user 0m0.557s 
sys  0m0.090s 

Что здесь происходит?

+2

Какая ОС? Какие конкретные версии python2.x и python3.x вы используете? Я знаю, что более ранние версии python3.x были в основном «получить реализованные функции - не беспокоиться о производительности». IIRC Начиная с python3.3 Я думаю, что производительность (для большинства вещей) начала приближаться к python2.x's ... – mgilson

+0

Что, собственно, делает ваш скрипт? Я предполагаю, что это имеет какое-то отношение к типам строк, которые вы используете в каждом скрипте. Попробуйте создать пустой файл python и выполните тот же тест. У меня был выброс в 2 раза медленнее для моего первого теста py3. Тогда они были точно такими же. –

+0

Откуда вы знаете, что эти времена «загружаются»? Это также может быть «выгрузка», которая занимает дополнительное время. :) – selbie

ответ

0

Время запуска вы видите, значительно отличается от того, что я могу видеть на моей системе:

$ touch py 
$ python3 py 
$ time python3 py 

real 0m0.027s 
user 0m0.019s 
sys 0m0.006s 

$ python3 -V 
Python 3.4.2 

$ time python py 

real 0m0.023s 
user 0m0.013s 
sys 0m0.008s 

$ python -V 
Python 2.7.8 

Я вижу незначительное увеличение с Python3, но ничего, как второй увеличение 1, что вы видите. Возможно, есть две причины, по которым я могу думать о том, что может вызвать разницу. Во-первых, вы можете запустить файл запуска python при загрузке интерпретатора.

$ echo $PYTHONSTARTUP 
~/.pythonrc 

Проверьте, загружен ли загрузочный файл для python3, но не для python2.

Кроме того, попробуйте запустить тест без написания байткод:

time python -B foo 

Это, вероятно, среда выдавать локальные для установки, а не основное различие между версиями интерпретатора.

+0

У меня нет загрузочного файла. Я добавлю свои результаты, отличные от байт-кода, на мой вопрос. Я использую старую машину 600 МГц в качестве своего тестового стенда, что объясняет низкую скорость, но не должно приводить к такой большой разнице во времени загрузки. –

1

Попробуйте отключить «local site libraries», пропустив -S на python. Прохождение этого ускорило меня для меня, когда я играл с более медленными ящиками ARM. Например, я получаю:

time python3 -S -c pass 

работает примерно 0,076 секунды, настенные часы время, в то время как ваниль:

time python3 -c pass 

занимает 0,247 секунды. Передача этих параметров в python2 приводит к аналогичному ускорению для меня в разных дистрибутивах, поэтому даже это не объясняет несоответствие - просто способ обойти некоторые из них!

Надеюсь, вы не против меня, воскрешая эту тему; google указал мне на это, и я хотел получить полезный ответ.

Смежные вопросы