Просте прискорення Python-скриптів

Найкращий хостинг для ваших проектів!
Шукайте швидкий, надійний та функціональний хостинг? У такому разі зверніть увагу на пропозиції від REG.RU. Пост за посиланням містить детальну інформацію про них. Найголовніше – це сучасний, швидкий, надійний та безпечний хостинг. До того ж, ціни невисокі, є різні тарифні плани для різних завдань.
Але з великими обсягами даних ситуація інша. Скрипт може виконуватись і більше доби. Отже потрібна оптимізація. Тому в цій
статті ми поговоримо не про профільування, а про компіляцію Python-коду. При цьому відзначимо одну умову: варіанти оптимізації повинні бути невибагливими на час розробника, а навпаки, найпростішими.
Бенчмарк буде виконуватися двома скриптами, що виконують низку синтетичних завдань:
- generate.py - генерує 500 тисяч словників з одними і тими ж ключами та різними значеннями, серіалізує їх у json, а потім пише у файл. Вийшло приблизно так:
- analyze.py - зчитує раніше згенерований файл і агрегує їх використовуючи два методи:
o Якщо значення – це рядок, потрібно знайти символ, що використовується, за даним ключем
o Якщо значення - це числа, потрібно вирахувати середнє значення сигмоїдної функції від кожного з них.
Для бенчамрка беремо:
- Python 2.7 без сторонніх бібліотек (еталонний).
- Python 3 без сторонніх бібліотек.
- Pypy.
- Nuitka –recurse-none (компіляція лише основних файлів).
- Nuitka -recurse-all (компіляція всіх залежностей).
- Numba.
- Cython без модифікації коду для статичної тапізації.
Запуск numba не вдалося. Напевно, це не універсальний засіб прискорення чого завгодно.
Вимірювання проводилися на Mackbook ProLate 2013. Для запуску створено маленький fabric-скрипт.