Ответ
Cython — это компилятор, который транслирует Python-подобный код (с опциональной статической типизацией) в оптимизированный C/C++ код. Его основная цель — значительное ускорение выполнения Python-программ, особенно в вычислительно-интенсивных участках.
Ключевые цели использования:
- Ускорение кода: Преобразование узких мест (bottlenecks), таких как циклы или математические вычисления, в нативный код, который выполняется на порядки быстрее.
- Интеграция с C/C++: Позволяет легко вызывать функции из существующих C/C++ библиотек напрямую из Python, минуя сложные обертки.
- Защита исходного кода: Скомпилированные
.soили.pydфайлы являются бинарными, что затрудняет реверс-инжиниринг по сравнению с обычными.pyфайлами.
Как это работает на практике:
- Код с указанием типов пишется в файле
.pyx. - Создается
setup.pyдля компиляции. - В результате получается скомпилированный модуль, который импортируется в Python как обычный.
Пример:
Файл my_module.pyx:
# cpdef создает и C, и Python-версию функции
cpdef int sum_range_cy(int n):
# cdef объявляет переменные с C-типами
cdef int total = 0
cdef int i
for i in range(n):
total += i
return total
Файл setup.py для компиляции:
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("my_module.pyx")
)
# Компиляция командой: python setup.py build_ext --inplace
Использование в Python:
import my_module
import time
start = time.time()
result = my_module.sum_range_cy(100_000_000)
print(f"Cython version took: {time.time() - start:.4f}s")
# Cython version took: 0.0210s (примерно)