[Python, Высокая производительность] Немного Сythonа
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Дошли руки до Cythona, спасибо самоизоляции. Проблема прозаична — как ускориться на python с минимальными потерями в синтаксисе. Один из подходов — использование Сython (сместь С и python).
Не давала покоя публикация с громким названием. Но из содержания публикации мало что можно вынести, так как формулы и результирующая таблица неверны. Попробуем дополнить картину, начатую авторами поста и расставим точки над и.
*Тесты проводились на odroid xu4, ubuntu mate, python 2.7.17.
Cython ставится просто (pip install cython).
Будем мучить все те же числа Фибоначчи. Создадим файлы для тестов прироста производительности. Для языка python (test.py):
def test(n):
a, b = 0.0, 1.0
for i in range(n):
a, b = a + b, a
print (a)
Для языка cython(test2.pyx):
def test2(int n):
cdef int i
cdef double a=0.0, b=1.0
for i in range(n):
a, b = a + b, a
print (a)
Файл cython требует предварительной сборки. Для него создадим setup.py c содержимым:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize('test2.pyx'))
И соберем:
python setup.py build_ext --inplace
Теперь возьмем файл из упомянутого поста с тестами и немного его поправим, добавив возможность вводить собственное число на старте (tests.py):
import test
import test2
import time
number = input('enter number: ')
start = time.time()
test.test(number)
end = time.time()
py_time = end - start
print("Python time = {}".format(py_time))
start = time.time()
test2.test(number)
end = time.time()
cy_time = end - start
print("Cython time = {}".format(cy_time))
print("Speedup = {}".format(py_time / cy_time))
Посмотрим, что получилось:
python tests.py
Результаты:
Числа в вычислениях совпадают. Прирост скорости ощутим, хотя и не такой заоблачный, как ожидалось.
*Можно обойтись без сборки test2.pyx с использованием setup.py, для этого необходимо просто в файл tests.py добавить строки:
import pyximport
pyximport.install()
Теперь test2.pyx будет собираться на лету при каждом запуске tests.py, а файлов в папке будет меньше.
===========
Источник:
habr.com
===========
Похожие новости:
- [Kubernetes, Высокая производительность, Серверное администрирование, Системное администрирование] Kubernetes: ускорьте ваши сервисы через снятие процессорных ограничений (перевод)
- [Искусственный интеллект, Машинное обучение] Модерация текста: уроки этикета от Data Scientist’a
- [Open source, Python] Кракс! Миллениалы изобрели Python фреймворк
- [Python, Программирование] Напишем и поймем Decision Tree на Python с нуля! Часть 1. Краткий обзор (перевод)
- [Go, Lua, Высокая производительность, Тестирование IT-систем] Кто такая эта Ваша Pandora и при чем здесь Tarantool
- [Python, Тестирование IT-систем, Тестирование веб-сервисов] Тесты в Python: все основные подходы, плюсы и минусы. Доклад Яндекса
- [Высокая производительность, Компьютерное железо, Старое железо, Суперкомпьютеры, Электроника для начинающих] Экскурсия по Музею Истории Компьютеров в городе Горный Вид, Калифорния c девушкой Ириной из новосибирского Академгородка
- [Алгоритмы, Высокая производительность, Математика, Программирование] Динамическая балансировка нагрузки в pull-схеме
- [Python, Функциональное программирование] Функциональное программирование в питоне. Генераторы, как питонячий декларативный стиль
- [Python, Алгоритмы, Лайфхаки для гиков, Научно-популярное, Программирование] Определяем пульс по вебкамере в 50 строчек кода
Теги для поиска: #_python, #_vysokaja_proizvoditelnost (Высокая производительность), #_cython, #_python, #_vysokaja_proizvoditelnost (
Высокая производительность
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:30
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Дошли руки до Cythona, спасибо самоизоляции. Проблема прозаична — как ускориться на python с минимальными потерями в синтаксисе. Один из подходов — использование Сython (сместь С и python). Не давала покоя публикация с громким названием. Но из содержания публикации мало что можно вынести, так как формулы и результирующая таблица неверны. Попробуем дополнить картину, начатую авторами поста и расставим точки над и. *Тесты проводились на odroid xu4, ubuntu mate, python 2.7.17. Cython ставится просто (pip install cython). Будем мучить все те же числа Фибоначчи. Создадим файлы для тестов прироста производительности. Для языка python (test.py): def test(n):
a, b = 0.0, 1.0 for i in range(n): a, b = a + b, a print (a) Для языка cython(test2.pyx): def test2(int n):
cdef int i cdef double a=0.0, b=1.0 for i in range(n): a, b = a + b, a print (a) Файл cython требует предварительной сборки. Для него создадим setup.py c содержимым: from distutils.core import setup
from Cython.Build import cythonize setup(ext_modules=cythonize('test2.pyx')) И соберем: python setup.py build_ext --inplace
Теперь возьмем файл из упомянутого поста с тестами и немного его поправим, добавив возможность вводить собственное число на старте (tests.py): import test
import test2 import time number = input('enter number: ') start = time.time() test.test(number) end = time.time() py_time = end - start print("Python time = {}".format(py_time)) start = time.time() test2.test(number) end = time.time() cy_time = end - start print("Cython time = {}".format(cy_time)) print("Speedup = {}".format(py_time / cy_time)) Посмотрим, что получилось: python tests.py
Результаты: Числа в вычислениях совпадают. Прирост скорости ощутим, хотя и не такой заоблачный, как ожидалось. *Можно обойтись без сборки test2.pyx с использованием setup.py, для этого необходимо просто в файл tests.py добавить строки: import pyximport
pyximport.install() Теперь test2.pyx будет собираться на лету при каждом запуске tests.py, а файлов в папке будет меньше. =========== Источник: habr.com =========== Похожие новости:
Высокая производительность ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:30
Часовой пояс: UTC + 5