Python Быстродействие

Python Быстродействие — важная характеристика языка.

Python Быстродействие, по моему мнению, вполне достаточно для решения большинства задач программирования — при недостатке быстродействия надо сменить ПК или мозги программиста.

Привожу некоторые полезные высказывания на тему Python Быстродействие:

Питон считают медленным из-за того, что он скриптовый?

Ingernirated @Ingernirated
Романыч

Никогда не задумывался, почему проскакивают такие комментарии, что Питон медленный, это потому что он интерпретируемый?
Вопрос задан 19 марта 2017 года

РЕШЕНИЯ ВОПРОСА - 4

dimonchik2013   @dimonchik2013
Выведение из запоя по фотографии

Это потому, что комментирующие не знают предмета.

Да, Питон интерпретируемый, и он медленнее компилируемого Го, и тем более С++.

Но когда нужно решать задачу, Питон оказывается быстрым в практически любой сфере — от Веба до научных расчётов.

В программировании есть два потока:
1) борьба со сложностью задачи,
2) борьба со сложностью языка,

и то, и то с Питоном куда легче, чем с любым другим языком.

Конечно, там где HighEnd — там только Си ( Го очень хорошо идёт для веба), ну так «там» и curl с nginx ом, бывает, пересобирают.

Ответ написан  19 марта

jacob1237 @jacob1237

Python считается медленным, потому что он интерпретируемый и в стандартной реализации интерпретатора (CPython) нет таких вещей как JIT компиляция.

Таким образом JavaScript (на основе V8), к примеру, обгоняет его по скорости.

Кроме того, в ряде бенчмарков Python3 оказывается медленнее чем Python2.

Однако медленный — понятие относительное.

В Python сильно развита система использования внешних модулей/динамических библиотек, есть возможность писать модули на C/C++, использовать внешние динамические библиотеки с помощью ctypes и т. д.

Грубо говоря, когда нужно ускорить какую-то часть программы за счёт выноса её на более низкий уровень, Питон никак не будет мешать Вам это делать.

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

Ответ написан 19 марта

Николай Карелин @nikolay_karelin
Системный архитектор, пишу на Python, Tcl, Matlab

Во первых, строго говоря, Python компилируется в байт-код, как и Java.

Насколько я знаю ситуацию, довольно большой вклад в медленную работу Python даёт его динамическая природа: когда виртуальная машина Python встречает выражение типа a + b, ей надо проверить, какие именно типы имеют величины из этих двух переменных, определены ли специальные методы типа __add__() и т. п. — это может занять вагон времени, особенно если происходит внутри цикла.

Хочу заметить, что доступные компиляторы для Python: PyPy (JIT), Numba (JIT, для численных расчетов), Cython (конвертер в C)  основаны на выводе типов и/или специальных аннотациях, иначе большой скорости программы не будет и после них.

Я на эту тему пару докладов делал в прошлом году: https://www.youtube.com/watch?v=aVriaZJDHks (на английском) и https://dev.by/lenta/space-blog/pycon-belarus-2016 (на русском).

Ответ написан 23 марта

Python не был безнадёжно медленным даже в первые годы его существования и имел быстродействие на уровне других интерпретируемых языков программирования, а с тех пор быстродействие персональных компьютеров выросло многократно.

Запустите программы рисования графики, чтобы убедиться в высоком быстродействии Питона.

Привожу информацию, разъясняющую работу Интерпретатора и Компиляторов Python:

Как работает Python?

Всем ещё раз привет, сейчас расскажу о том, как работает Python, что такое Интерпретатор, как работает компилятор и что такое байт-код, далее расскажу о виртуальной машине (PVM) и о производительности Python. Также о альтернативных реализациях Интерпретатора.

После того, как Вы установили себе Python, перейдем к теоретически-практической части и начнём с того, что из себя представляет Интерпретатор.

Интерпретатор

Интерпретатор - это такая программа, которая выполняет другие программы. Когда вы пишете программу на языке Python, интерпретатор читает вашу программу и выполняет содержащиеся в ней инструкции.

В действительности Интерпретатор — это слой программной логики между Вашим программным кодом и аппаратурой Вашего компьютера.

В зависимости от используемой версии Python сам Интерпретатор может быть реализован как программа на языке C, как набор классов Java и в каком-либо другом виде, но об этом позже.

Запуск сценария в консоли

Давайте запустим в консоли интерпретатор:

# python

Теперь он ожидает ввода команд, введите туда следующую инструкцию:

>>> print (‘hello world!’)

Ура, наша первая программа!

Запуск сценария из файла

Создайте файл «test.py», с содержимым:

# вывести «hello world»
print («hello world»)
# вывести 2 в 10 степени
print (2 ** 10)

и выполните этот файл:

# python /path/to/test.py

Вы увидите в консоли результат, поехали дальше!

Динамическая компиляция и байт-код

После того, как запустите сценарий, Python сначала компилирует исходный текст сценария в байт-код для виртуальной машины.

Компиляция - это просто этап перевода, а байт-код это низкоуровневое платформо-независимое представление исходного текста программы.

Python транслирует каждую инструкцию в исходном коде сценария в группы инструкций байт-кода для повышения скорости выполнения программы, так как байт-код выполняется намного быстрее.

После компиляции в байт-код, создается файл с расширением «.pyc» по соседству с исходным текстом сценария.

В следующий раз, когда Вы запустите свою программу, интерпретатор минует этап компиляции и отдаст на выполнение откомпилированный файл с расширением «.pyc». Однако, если Вы изменили исходные тексты Вашей программы, то снова произойдет этап компиляции в байт-код, так как Python автоматически следит за датой изменения файла с исходным кодом.

Если Python окажется не в состоянии записать файл с байт-кодом, например из-за отсутствия прав на запись на диск, то программа не пострадает, просто байт-код будет собран в памяти и при завершении программы оттуда удален.

Виртуальная машина Python (PVM)

После того, как пройдет процесс компиляции, байт-код передаётся механизму под названием виртуальная машина, которая и выполнит инструкции из байт-кода.

Виртуальная машина - это механизм времени выполнения, она всегда присутствует в составе системы Python и это крайняя составляющая системы под названием «Интерпретатор Python».

Для закрепления пройденного ещё раз проясним ситуацию: компиляция в байт-код производится автоматически, а PVM — это всего лишь часть системы Python, которую Вы установили вместе с интерпретатором и компилятором. Всё происходит прозрачно для программиста, и Вам не надо выполнять эти операции вручную.

Производительность

Программисты, имеющие опыт работы с такими языками как C и C++, могут заметить некоторые отличия в модели выполнения Python.

Первое — это отсутствие этапа сборки или вызова утилиты «make»: программы на Python могут быть сразу же запущены после написания исходного кода.

Второе отличие — байт-код не является двоичным машинным кодом (например инструкции для микропроцессора Intel), он является внутренним представлением программы на языке Python.

По этим причинам программы на Python не могут выполняться также быстро, как на C/C++.

Обход инструкций выполняет виртуальная система, а не микропроцессор, и чтобы выполнить байт-код, необходима дополнительная интерпретация, инструкции которой требуют большего времени, чем машинные инструкции микропроцессора.

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

В итоге Python по производительности находится между традиционными компилирующими и традиционными интерпретирующими языками программирования.

Альтернативные реализации Python

То, что было сказано выше о компиляторе и виртуальной машине, характерно для стандартной реализации Python, так называемой CPython (реализации на ANSI C). Однако также существует альтернативные реализации, такие как Jython и IronPython, о которых пойдёт сейчас речь.

CPython

Это стандартная и оригинальная реализация Python, названа так, потому что написана на ANSI C. Именно её мы установили, когда выбрали пакет ActivePython или установили из FreeBSD портов. Поскольку это эталонная реализация, она как правило работает быстрее, устойчивее и лучше, чем альтернативные реализации.

Jython

Первоначальное название JPython, основная цель - тесная интеграция с языком программирования Java.

Реализация Jython состоит из Java-классов, которые выполняют компиляцию программного кода на языке Python в байт-код Java и затем передают полученный байт-код виртуальной машине Java (JVM).

Цель Jython состоит в том, чтобы позволить программам на языке Python управлять Java-приложениями, точно также как CPython может управлять компонентами на языках C/C++.

Эта реализация имеет беcшовную интеграцию с Java. Поскольку программный код на Python транслируется в байт-код Java, во время выполнения он ведет себя точно также, как настоящая программа на языке Java.

Программы на Jython могут выступать в качестве апплетов и сервлетов, создавать графический интерфейс с использованием механизмов Java и т. д. Более того, Jython обеспечивает поддержку возможности импортировать и использовать Java-классы в программном коде Python.

Тем не менее, поскольку реализация Jython обеспечивает более низкую скорость выполнения и менее устойчива по сравнению с CPython, она представляет интерес скорее для разработчиков программ на языке Java, которым необходим язык сценариев в качестве интерфейса к Java-коду.

IronPython

Реализация предназначена для обеспечения интеграции программ Python с приложениями, созданными для работы в среде Microsoft .NET Framework операционной системы Windows, а также в Mono — открытом эквиваленте для Linux.

Платформа .NET и среда выполнения языка C# предназначены для обеспечения взаимодействия между программными объектами — независимо от используемого языка программирования, в духе более ранней модели COM компании Microsoft.

IronPython позволяет программам на языке Python играть роль как клиентских, так и серверных компонентов, доступных из других языков программирования .NET.

Поскольку разработка ведётся компанией Microsoft, от IronPython, помимо прочего, можно было бы ожидать существенной оптимизации производительности.

Средства оптимизации скорости выполнения

Существуют и другие реализации, включая динамический компилятор Psyco и транслятор Shedskin C++, которые пытаются оптимизировать основную модель выполнения.

Динамический компилятор Psyco

Система Psyco - это компонент, расширяющий модель выполнения байт-кода, что позволяет программам выполняться быстрее.

Psyco является расширением PVM, которое собирает и использует информацию о типах, чтобы транслировать части байт-кода программы в истинный двоичный машинный код, который выполняется гораздо быстрее.

Для такой трансляции не требуется вносить изменения в исходный код или производить дополнительную компиляцию в ходе разработки.

Во время выполнения программы Psyco собирает информацию о типах объектов, и затем эта информация используется для генерации высокоэффективного машинного кода, оптимизированного для объектов этого типа.

После этого произведенный машинный код заменяет соответствующие участки байт-кода, тем самым увеличивается скорость выполнения.

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

Psyco обеспечивает увеличение скорости от 2 до 100 раз, но обычно в 4 раза, при использовании не модифицированного Интерпретатора Python.

Единственный минус у Psyco, это то обстоятельство, что в настоящее время он способен генерировать машинный код только для архитектуры Intel x86.

Psyco не идёт в стандартной поставке, его надо скачать и установить отдельно. Ещё есть проект PyPy, который представляет собой попытку переписать PVM с целью оптимизации кода как в Psyco, проект PyPy собирается поглотить в большей мере проект Psyco.

Транслятор Shedskin C++

Shedskin - это система, которая преобразует исходный код на языке Python в исходный код на языке C++, который затем может быть скомпилирован в машинный код. Кроме того, система реализует платформо-независимый подход к выполнению программного кода Python.

Фиксированные двоичные файлы (frozen binaries)

Иногда необходимо из своих программ на Python создавать самостоятельные исполняемые файлы. Это необходимо скорее для упаковки и распространения программ.

Фиксированные двоичные файлы объединяют в единый файл пакета байт-код программ, PVM и файлы поддержки, необходимые программам. В результате получается единственный исполняемый файл, например файл с расширение «.exe» для Windows.

На сегодняшний день существует три основных инструмента создания «frozen binaries»:

  • py2exe - он может создавать автономные программы для Windows, использующие библиотеки Tkinter, PMW, wxPython и PyGTK для создания графического интерфейса, программы использующие программные средства создания игр PyGame, клиентские программы win32com и многие другие;
  • PyInstaller - напоминает py2exe, но также работает в Linux и UNIX и способен производить само-устанавливающиеся исполняемые файлы;
  • freeze - оригинальная версия.

Вам надо загружать эти инструменты отдельно от Python, они распространяются бесплатно.

Фиксированные двоичные файлы имеют немалый размер, ибо они содержат в себе PVM, но по современным меркам их всё же нельзя назвать необычно большими.

Так как интерпретатор Python встроен непосредственно в фиксированные двоичные файлы, его установка не является обязательным требованием для запуска программ на принимающей стороне.

Так как Psyco обеспечивает увеличение скорости от 2 до 100 раз, считаю необходимым инсталлировать и освоить Psyco.

Кроме того, нужно инсталлировать и освоить freeze, а также обязательно измерить увеличение скорости работы программ.

Приглашаю всех высказываться в Комментариях. Критику и обмен опытом одобряю и приветствую. В хороших комментариях сохраняю ссылку на сайт автора!

И не забывайте, пожалуйста, нажимать на кнопки социальных сетей, которые расположены под текстом каждой страницы сайта.
Python БыстродействиеПродолжение тут…

Deviz_13

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Проверка комментариев включена. Прежде чем Ваши комментарии будут опубликованы пройдет какое-то время.