Русский
Русский
English
Статистика
Реклама

Немного Сythonа



Дошли руки до Cythona, спасибо самоизоляции. Проблема прозаична как ускориться на python с минимальными потерями в синтаксисе. Один из подходов использование Сython (сместь С и python).
Не давала покоя публикация с громким названием отсюда habr.com/ru/company/ruvds/blog/462487
Но из содержания публикации мало что можно вынести, так как формулы и результирующая таблица неверны. Попробуем дополнить картину, начатую авторами поста и расставим точки над и.

*Тесты проводились на 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 setupfrom Cython.Build import cythonizesetup(ext_modules=cythonize('test2.pyx'))


И соберем:
python setup.py build_ext --inplace


Теперь возьмем файл из упомянутого поста с тестами и немного его поправим, добавив возможность вводить собственное число на старте (tests.py):
import testimport test2import timenumber = input('enter number: ')start = time.time()test.test(number)end =  time.time()py_time = end - startprint("Python time = {}".format(py_time))start = time.time()test2.test(number)end =  time.time()cy_time = end - startprint("Cython time = {}".format(cy_time))print("Speedup = {}".format(py_time / cy_time))


Посмотрим, что получилось:
python tests.py


Результаты:

Числа в вычислениях совпадают.
Прирост скорости ощутим, хотя и не такой заоблачный, как ожидалось.

*Можно обойтись без сборки test2.pyx с использованием setup.py, для этого необходимо просто в файл tests.py добавить строки:
import pyximportpyximport.install()

Теперь test2.pyx будет собираться на лету при каждом запуске tests.py, а файлов в папке будет меньше.
Источник: habr.com
К списку статей
Опубликовано: 04.09.2020 00:21:28
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Python

Высокая производительность

Cython

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru