Просте прискорення 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-скрипт.