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


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

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”

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


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

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