Pull to refresh

Comments 20

Написано, конечно, хорошо, спасибо, но кат, кат!
А разве нет? Сорри, я вроде вставлял. Сейчас будет.
Вот она! Прекрасная статья, а не 7 предложений и 15 строк банального листинга. Спасибо вам!
За статью спасибо — приятно когда на Хабре все же встречается повод немного размять мозги :)

Мне кажется, что достойным «финальным аккордом» было бы логично выбросить GPP и сделать свой препроцессор со специальным синтаксисом конкретно под нашу задачу (выделение в коде Python и Cython блоков).
Первоначально я как раз собирался сделать мини-препроцессор, чтобы Cython-код можно было указывать просто в комментариях, наподобие cpdef unsigned long long sum_even_fibo_le(unsigned long long upb. Но, раз GPP уже существует, почему бы не воспользоваться им?
Тьфу. Наподобие #cpdef unsigned long long sum_even_fibo_le(unsigned long long upb):
Тьфу. Наподобие #cpdef unsigned long long sum_even_fibo_le(unsigned long long upb):
Спасибо за статью!

1. Интересует: а стоит ли овчинка выделки?
Сейчас я использую Питон + критические модули на C
Проводили ли вы сравнение?

2. Интересует ваша среда сборки и развёртывания. (Вижу вы используете Джанго)
Как у вас это организовано?
1. Интересует: а стоит ли овчинка выделки?
Сейчас я использую Питон + критические модули на C
Проводили ли вы сравнение?


Стоит. Cython транслируется именно в C (или, при cython --cplus, в C++), который затем уже компилируется тем же самым gcc/g++, с любыми настройками оптимизаций. Скачок в производительности заметный даже при использовании Python-типов данных (раза в два); при использовании C-типов он и того больше. Будет минутка — я постараюсь упомянуть выигрыш в производительности у Cython-версии функции в примере по сравнению с Python-версией.
Проверил.
Суть бенчмарка — вызов функции sum_even_fibo_le() в цикле, 1048575 раз: print(sum(sum_even_fibo_le(n) for n in xrange(1, 0xFFFFF))).
Python-овый код при интерпретировании: 13,07s.
Python-овый код без модификаций, при компиляции Cython-ом: 4,48s
Cython-овый код (по сути, только Cython-овые заголовки вместо Python-овых): 0,47s.
Точнее, всё-таки 1048574 раза :)
2. Интересует ваша среда сборки и развёртывания. (Вижу вы используете Джанго)
Как у вас это организовано?


Django использую, но Cython в нём — пока нет. Стыдно признаться, но я олдскулен, и мне пока для всего хватает Makefile. Правда, в ключевом проекте размер Makefile-а уже приближается к 15k, так что в какое-то ближайшее время я буду исследовать distutils. Но не раньше, чем Makefile исчерпает себя.
UFO just landed and posted this here
Производительность компилированного Cython-кода заметно выше, чем производительность интерпретации Python-ом.
UFO just landed and posted this here
Статья интересная, спасибо.

Вот только человек, который придет поддерживать проект после вас ни один раз вспомнит вас нехорошим словом. Да и в продакшн код с таким маргинальным подходом лично я бы никогда не пустил.

Если требуются такие ухищрения, то стоит подумать об использования другого инструмента, т.к. питон для вашей задачи, возможно, плохо подходит.
Интересная заметка, постараюсь подход применить как-нибудь на практике.

А где сейчас используется Cython?
В смысле, в каких отраслях/областях? Можно использовать везде, где можно использовать Python (т.е., едва ли не везде вообще, кроме разве что программирования модулей ядра :) ) — от веба до игр, движков и числодробилок.

Или, в смысле, в известных широким кругам проектах? wiki.cython.org/projects — самое известное из списка, пожалуй, Sage.
Sign up to leave a comment.

Articles