Какая самая быстрая версия Python?
Какая самая быстрая версия Python?
Конечно, «это зависит», но от чего и как вы можете оценить, какая из них самая быстрая версия Python для вашего приложения?
Является ли Python 3 медленнее, чем Python 2? Какая версия Python 3 является самой быстрой и какие у вас есть другие возможности для скорости?
Использование служебной утилиты производительности
Основная команда Python много заботится о производительности,, что отлично подходит для сравнения «официальных» тестов с версиями CPython.
Однако есть несколько проблем:
- Результаты довольно трудно читать
- Они не включают PyPy
Вместо этого вы можете загрузить панель инструментов, которая запускает этот веб-сайт, с помощью производительности потоковой установки, тогда вы можете запустить
pyperformance run --python = {selected_python_runtime} -o my_results.json
Это приведет к запуску серии документированных приложений «реального мира» с этой целевой версией Python несколько раз и записи средних, медианных и
Это фактически то, что я сделал для этой статьи, против официальных установок Python:
- 10,
- 3.4.4,
- 3.5.4,
- 3.6.1, и
- 3.7 (у меня beta 2).
Кроме того, это включает PyPy (5.6.) И PyPy3 (5.4.10).
Результаты
Я сбросил результаты в зависимости от варианта использования, поэтому взгляните, запустите свой собственный тест и, возможно, напишите свой собственный тест.
Я также создал простой скрипт, чтобы взять список перфомансов и создать графики для каждого теста. Код находится на GitHub.
На всех графиках результаты в секундах, а нижние - лучше.
Полные результаты вместе с графиками доступны здесь: https://github.com/tonybaloney/performance_testing/tree/master/png
Я включил тесты, которые, как я думал, имеют значение. Остальные тесты показывают очень похожие шаблоны, которые находятся в заключении.
Рендеринг шаблонов HTML
Тест django_html будет использовать механизм рендеринга шаблонов Django для создания таблицы HTML 150x150. Он использует классы Content и Template для механизма Django.
Python 3.7 в 1,19 раза быстрее, чем Python 2.7, но только Python 3.x способен побить запущенную мной отметку Python 2.7
PyPy разбивает любой из результатов CPython, но с PyPy3 в два раза медленнее PyPy. Стоит отметить недавнее решение Django отказаться от поддержки Python 2 в Django 2.0 и более поздних версиях, что означает, что PyPy также больше не будет совместим с Django 2.
Время запуска
Этот тест просто проверяет время, необходимое для запуска интерпретатора. Если вы преодолеваете ограничение «GIL» Python, запустив несколько процессов, это будет значительным.
Обратите внимание на прыжок с PyPy, особенно PyPy3, я расскажу, почему в конце этой статьи.
Но суть в том, что время запуска Python 2.7 по-прежнему непобедимо.
Криптография: crypto_paes
В этом тесте вы увидите заметное падение скорости между Python 2 и 3. Почему? Crypto требует большого количества сжатий, а Python 3 больше не имеет 32-разрядного целочисленного типа, а лишь очень длинное целое.
Пользователи PyPy - вы заметите, что PyPy3 почти в 5 раз медленнее PyPy!
n-queens: тест алгоритма
Эта реализация не особенно изящна и извините за то, что она вызвала плохие воспоминания у всех, кто должен был сидеть на лекциях по Алгоритмам по этой теме. Чтобы решить эту головоломку, следует просто разместить (n) королев на шахматной доске, чтобы они не могли побить друг друга.
Из серии CPython, 3,7 выходит сверху еще раз, но результаты PyPy и PyPy3 особенно похожи.
Арифметика с плавающей точкой
Тест «float» - это искусственное приложение с арифметическим вычислением с плавающей точкой, которое создаст 100 000 точечных объектов, которые вычисляют math.cos (), math.sin () и math.sqrt ().
Это приложение, которое идеально подходит для PyPy, множество сжатий числа, предсказуемые типы и методы и цикл. Python 3.7 имеет новый код быстрого вызова, который используется в этом тесте.
Регулярные выражения
В тесте регулярного выражения «50 самых популярных страниц в Интернете и осуществляется протоколирование всех выполняемых операций регулярного выражения. Каждой операции присваивается вес, который рассчитывается по оценке популярности страниц, где он происходит, и количеству раз, когда он выполняется при загрузке каждой страницы. Наконец, литеральные буквы в данных кодируются с использованием ROT13 таким образом, который не влияет на то, как регулярные выражения соответствуют их вводу».
Я не знаю, что случилось с PyPy здесь, мне было бы интересно узнать, имеет ли кто-нибудь другой результат!
Обновление: команда PyPy увидела эту статью и исправила проблему в течение нескольких часов
Так Python 3 быстрее, чем Python 2?
Да! почти во всех тестах. Заметными исключениями были тест crypto_paes, где Python 3 был в 1,35 раза медленнее (из-за целочисленных типов), python_startup в 1.39 раза медленнее.
Медленный запуск Python 3 - это проблема, с которой основная команда CPython работает над версиями 3.8, 3.9.
Помимо этих двух тестов, Python 3 в этих тестах примерно на 1,2-1,3 раза быстрее. Вы должны увидеть улучшение обновления до Python 3.7, когда он возглавит продажи в конце этого года.
Почему PyPy намного быстрее и почему все не используют просто его вместо этого?
PyPy быстрее, чем CPython, поскольку он имеет компилятор Just-in-time. JIT-компиляторы имеют большое преимущество в том, что они очень эффективны при выполнении предсказуемых, повторяющихся задач. Одна из особенностей эталонных тестов заключается в том, что вы пытаетесь запустить один и тот же фрагмент кода несколько раз, чтобы сделать его точным, нажмите приложение и уменьшите границы ошибок. Так как PyPy великолепен на этих тестах.
Недостатком компилятора JIT и, в частности, PyPy является высокая стоимость запуска. Другим недостатком является отсутствие совместимости для многих C-Extensions. Поскольку «Python» (CPython, официальный PSF Python) написан на C, многие сторонние расширения на PyPi используют это. Примером может служить Numpy, большая часть Numpy написана в оптимизированном C-коде. Когда вы устанавливаете numpy, он использует ваш локальный компилятор C и строит двоичную библиотеку для вашей среды исполнения Python.
Поскольку PyPy написан на Python, многие модули просто не могут работать в PyPy. Поэтому вы всегда должны проверять.
Кроме того, PyPy испытывает такую же проблему, как CPython - переход от версии 2 к версии 3. Я обнаружил, что до недавнего времени PyPy3 нестабилен, и в тестах вы все еще можете видеть нечетные несоответствия с PyPy. У меня также были проблемы с пакетами (например, PyTest), отбрасывающие поддержку PyPy3, в то время как они сглаживают проблемы.
Заключение
Python 3.7 является самым быстрым из «официальных» Python и PyPy - это самая быстрая реализация, которую я тестировал.
Мне бы очень хотелось, чтобы PyPy3 работал так же хорошо, если не лучше PyPy в будущем, поскольку Python 2 становится менее используемым.