П’ять проектів, які допомагають прискорити код на Python


Python – простий і зручний динамічна мова мова, але усі відмінно знають про його слабкість: він працює повільніше, чим код на Сі, Java або навіть JavaScript, коли справа доходить до завдань, яким потрібно інтенсивну роботу ЦП. Якщо ви не хочете з цим миритися і вважаєте, що просто вставити в комп’ютер більше оперативної пам’яті – не вихід, то у вас залишається два шляхи:

  • Можна використати для мови інше середовище (швидше за все, у вас CPython). Це досить серйозний крок, але і ефект має бути що відповідає.
  • Можна переписати існуючий Python- код, оптимізуючи його для більшої швидкості. Це, звичайно, зажадає великих трудовитрат.

Приводимо п’ять проектів, які спробували розв’язати цю проблему одним з двох цих способів.

PyPy

Серед усіх кандидатів на заміну CPython самим, що виділяється є PyPy. Quora, наприклад, використовує його на продакшене. Мабуть, у нього є усі шанси стати середовищем за умовчанням із-за відмінної сумісності з існуючим кодом.

PyPy використовує JIT- компіляцію, так само, як і движок Google Chrome для виконання JavaScript, що і дає приріст в швидкості. Проте для любителів використати самі останні можливості мови є неприємна новина – PyPy реалізує підтримку нових версій мови зі значною затримкою.

Pyston

Цей проект, який спонсорував Dropbox ‘ом, використовує LLVM (Low Level Virtual Machine) інфраструктуру для компілятора, який теж використовує JIT. Якщо проводити порівняння з PyPy, Pyston ще тільки на початковому рівні розвитку – актуальна версія зараз 0.5.1, і вона підтримує далеко не усі можливості мови.

Nuitka

Cython

Cython – надбудова над Python, особлива версія мови, яка компілюється в Сі і інтерфейси з C/C++ кодом. Це один з шляхів для написання Сі розширень для Python (щоб могли бути імплементовані ділянки коду, які вимагають особливої швидкості). Втім, його можна використати і окремо від звичайного Python. Зворотний бік медалі полягає в тому, що перенесення існуючої кодової бази не буде повністю автоматичним – технічно, ви вже пишете не зовсім на Python.

Cython досить широко поширений і використовується у багатьох бібліотеках. Так, наприклад, деякі алгоритми в scikit – learn написані саме на Cython для підвищення продуктивності.

Numba

Numba комбінує два попередні підходи. Від Cython вона бере ідею, що слід прискорювати ті частини мови, які найбільше цього вимагає (наприклад, математичні обчислення, прив’язані до ЦП); так само, як PyPy або Pyston, вона робить це за допомогою LLVM. Функції, компільовані Numba, можуть бути помічені особливими декораторами, і Numba працюватиме над їх прискоренням разом з NumPy. Проте Numba не використовує JIT, тому на компіляцію йде додатковий час.

Переклад статті “5 projects that push Python performance”

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *