Сам по себе язык программирования Python очень хорош и используется во многих сферах IT. Но у него есть один существенный минус, который тянется за ним шлейфом — это низкая производительность по сравнению с другими языками. Поэтому для программ на Python очень необходима оптимизация.
Нет смысла сейчас обсуждать чем вызвана медлительность Python, потому что на эти качества пока невозможно повлиять, так как они являются особенностью этого языка. При этом можно применить ряд инструментов и подходов при написании кода на Python, чтобы ускорить работу программ на этом языке силами самого языка.
Оптимизация Python
Когда дело доходит до оптимизации производительности Python, то чаще всего можно встретить 3 совета:
Использовать специальные модули для ускорения работы программ на Питоне по типу Psyco. Но такие модули имеют слабую поддержку и непонятно сколько они еще прослужат, хотя ускоряют работу Python-программ на десятки процентов.
Использовать Python C Extensions, чтобы переписать часть кода программы на языке С, тем самым ускорив ее производительность. Но для этого нужно обладать дополнительными знаниями, например знать тот же язык «С» и технологию C API. Помимо этого очень сильно снижается скорость разработки программ «Python+С».
Сменить используемые алгоритмы. Но и тут иногда возникает такая ситуация, что используется достаточно «шустрый» алгоритм и заменить не на что, но при этом скорость работы программы не радует.
Самое кардинальное решение — это сменить язык разработки с Python на другой. Но об этом бывает уже слишком поздно думать, поэтому проект может спасти оптимизация кода Python его внутренними инструментами.
Оптимизация производительности Python его же инструментами
Приведем несколько рекомендаций, как проводится оптимизация Python, а конкретнее, на что нужно обращать внимание в процессе разработки, чтобы конечный скрипт работал эффективнее.
Избегать применения глобальных переменных
Чрезмерное применение глобальных переменных в любых языках программирования считается дурным тоном. Потому что такое действие может повлечь за собой множество побочных эффектов, от которых тяжело будет избавиться. Множественное применение глобальных переменных очень часто приводит к спагетти-коду, что вызывает дополнительные трудности и проблемы.
Специфика Python такова, что он очень медленно обрабатывает доступ к глобальным переменным, особенно внутри циклов. Поэтому их меньшее количество — это первый шаг ускорить работу Питона.
Внешние библиотеки
Использование дополнительных библиотек в программировании — это обычное дело. Но в Python можно ускорить взаимодействие со сторонними библиотеками, если на них посмотреть пристальнее. Нужно обратить внимание на каком языке написана библиотека; если есть возможность применять библиотеки на С, то лучше применять их, так как они работают быстрее, а это значит, что и ваша программа на Python будет работать немного быстрее. Например, можно использовать:
«cPickle», а не «pickle»;
<Cython> — это библиотека для Питона, которая поддерживает функции и типы С;
РуРу — это JIT-компилятор, который ускоряет код Python;
пакет Pandarallel, который распараллеливает операции на несколько процессов;
библиотеку NumPy;
и многое другое.
Применение встроенных инструментов Python
Лучше изучите Python, особенно наличие его встроенных инструментов: модулей и функций. Их применение ускоряет сам код, за счет того, что они предварительно скомпилированы и выполняются достаточно быстрее, чем длительные итерации.
Поэтому нужно применять:
функцию map();
модуль cProfile;
«list Component», где это возможно, вместо «For Loop»;
связанные списки;
функции range() и xrange();
наборы Python;
метод join();
и др.
Работа над кодом
Оптимизация Python состоит из мелочей, поэтому целиком и полностью зависит от вашего личного усердия при написании кода. Вам нужен обдуманный и уравновешенный подход:
применять внутренние инструменты Python;
не создавать лишние глобальные переменные, тщательно подбирать библиотеки и расширения;
по возможности внедрять код С;
писать сам код обдуманно и максимально лаконично;
по возможности внедрять кеширование объектов;
не создавать лишние экземпляры объектов;
и др.
В этом случае есть шанс сделать вашу программу на Python максимально быстрой.
Заключение
В программировании бытует мнение, что любой написанный код, в первую очередь, должен быть эффективным и рабочим. Только потом можно приступать к его оптимизации. При этом в Python оптимизация должна проходит прямо в процессе разработки, так как она состоит из множества мелких моментов, которые потом будет сложно изменить.
Оптимизация производительности Python не имеет четкого алгоритма действий. Над этой проблемой многие разработчики «бьются» по-своему, поэтому мест, где можно оптимизировать код Питона, очень много. Иногда даже незначительные изменения типа «вместо «**» правильно написать «*» в нужном месте» могут ускорить работу кода Python в несколько раз. Оптимизация Python — это придание важности даже мелочам, поэтому экспериментируйте.

Python