Простое ускорение Python-скриптов
Примеры Python » Python для начинающих python скрипт, оптимизация python, ускорение выполнения python
Лучший хостинг для ваших проектов!
Ищите быстрый, надежный и функциональный хостинг? В таком случае обратите внимание на предложения от REG.RU. Пост по ссылке содержит детальную информацию о них. Самое главное – это современный, быстрый, надежный и безопасный хостинг. К тому же цены невысокие, есть разные тарифные планы для различных задач.
Но, с большими объемами данных ситуация иная. Скрипт может выполняться и больше суток. Значит нужна оптимизация. Поэтому в этой
статье мы поговорим не о профилировании, а о компиляции Python-кода. При этом отметим одно условия: варианты оптимизации должны быть нетребовательными к времени разработчика, а наоборот, самыми простейшими.
Бенчмарк будет выполнятся двумя скриптами, выполняющие ряд синтетических задач:
- generate.py – генерирует 500 тысяч словарей с одними и теми же ключами и различными значениями, сериализует их в json, а затем пишет в файл. Вышло примерно так:
{"str_youCPQmO": "TMrjhoKpFuyZ", "int_VAuUXXmC": 5, "int_ScRduCVX": 73, "str_YfsEUEve": "IOAYDoAuZBzQ", "int_dlBzZYlO": 77, "int_lJaDHVSH": 45, "str_qzDCDxbm": "rfERFTVFZiku", "int_gblmMsBX": 57, "str_MZNfINjj": "DeDaDMjKQyzo", "str_sUQVbIyn": "tenhduEcWkof"}
{"str_youCPQmO": "OJRZDmiQxflr", "int_VAuUXXmC": 9, "int_ScRduCVX": 32, "str_YfsEUEve": "CYxuIUTWAVTH", "int_dlBzZYlO": 37, "int_lJaDHVSH": 22, "str_qzDCDxbm": "aZTizzobHBbh", "int_gblmMsBX": 63, "str_MZNfINjj": "sJElOjzNlpJZ", "str_sUQVbIyn": "WDUdOMwERjxm"}
- analyze.py – считывает ранее сгенерированный файл и агрегирует их используя два метода:
o Если значение – это строка, нужно найти самый используемый символ по данному ключу
o Если значение – это числа, нужно высчитать среднее значение сигмоидной функции от каждого из них.
Для бенчамрка берем:
- Python 2.7 без сторонних библиотек (эталонный).
- Python 3 без сторонних библиотек.
- Pypy.
- Nuitka –recurse-none (компиляция лишь основных файлов).
- Nuitka –recurse-all (компиляция всех зависимостей).
- Numba.
- Cython без модификации кода для статической тапизации.
Запуск numba не удался. Наверное, это не универсальное средство ускорения чего угодно.
Измерения проводились на Mackbook Pro Late 2013. Для запуска создан маленький fabric-скрипт.
В результате от скрипта к скрипту меняется прирост производительности (ничего удивительного). В то же время, можно с уверенностью сказать о победе pypy в обеих категориях, Cython тоже дает определенное ускорение, а вот nuitka тут вообще не дает результата (но тоже может использоваться, если, к примеру, есть необходимость просто в сборе воедино всех зависимостей). Интересно и то, что для агрегации python 3 оказался быстрее cynthonized-версии одного и того же скрипта. Поэтому, можно сделать вывод, что в различных случаях можно использовать pypy и Cython.