Комментарии 11
Опять hello world с бессмысленными "бенчмарками". Ради приличия взяли бы хоть раз какую-то реальную bottleneck проблему сложнее Фибоначчи и переложили бы её на Cython. Сразу бы прочувствовали на реальном опыте "минимальные потери в синтаксисе" и прочие грабли.
*Можно обойтись без сборки test2.pyx с использованием setup.py, для этого необходимо просто в файл tests.py добавить строки
Если это совет так делать всегда, то это вредный совет. Такое годится только для экспериментального кода на вашей машине. Это не для применения в распространяемом коде библиотек и приложений. Вы же не хотите заставить ваших пользователей иметь C-компилятор и настроенное окружение для сборки Cython-кода для запуска вашего проекта? Cython-изация должна выполняться только на этапе сборки пакета (Cython должен быть только в setup_requires). Если вы распространяете бинарные wheel-ы своего пакета с pyx-файлами, то там должны лежать уже собранные модули расширения и никаких исходников в pyx и никакой зависимости от Cython в runtime.
А зачем считать Фибоначчи в числах с плавающкй запятой? Ни точности, ни скорости.
Имел неприятный опыт переписывания одного куска сравнительно сложной физической симуляции на Cython. Примерно на середине уже пожалел, что связался. Разобраться с написанием модуля для Cpython и написать модуль на C++ было бы быстрее и удобнее.
Сколько-либо сложный код обрастает огромным количеством объявлений типов и функций, теряется всякий смысл поддерживать иллюзию питона, так ещё потом тратится куча времени на поиск мест, где компилятор не смог вывести типы и всё обратно провалилось в вызовы интерпретатора.
Может я и не умею его готовить, но пользы в результате оказалось сильно меньше, чем кажется на первый взгляд. Причём некоторые части переписывал потом обратно на питон( с использованием numpy) и разница составляла от нескольких процентов до 1.5-2 раз.
Но тривиальный код на Cython выходит быстрым, да. На числодробилке разница была от 100 раз и больше
P.S. Java 1,33e-5 на 3,9 ГГц для 1000чи.
Вот тут Фибоначчи-мерка на "любом" языке и на любой вкус.
https://github.com/drujensen/fib
enter number: 10
Python time = 7.653236389160156e-05
Cython time = 2.8133392333984375e-05
Speedup = 2.7203389830508473
enter number: 100
Python time = 8.678436279296875e-05
Cython time = 3.170967102050781e-05
Speedup = 2.736842105263158
enter number: 100000
Python time = 0.01643967628479004
Cython time = 0.0004260540008544922
Speedup = 38.5858981533296
enter number: 1000
Python time = 0.00031876564025878906
Cython time = 4.673004150390625e-05
Speedup = 6.821428571428571
Немного Сythonа