Для каких задач используется Cython в Python

Ответ

Cython — это компилятор, который транслирует Python-подобный код (с опциональной статической типизацией) в оптимизированный C/C++ код. Его основная цель — значительное ускорение выполнения Python-программ, особенно в вычислительно-интенсивных участках.

Ключевые цели использования:

  1. Ускорение кода: Преобразование узких мест (bottlenecks), таких как циклы или математические вычисления, в нативный код, который выполняется на порядки быстрее.
  2. Интеграция с C/C++: Позволяет легко вызывать функции из существующих C/C++ библиотек напрямую из Python, минуя сложные обертки.
  3. Защита исходного кода: Скомпилированные .so или .pyd файлы являются бинарными, что затрудняет реверс-инжиниринг по сравнению с обычными .py файлами.

Как это работает на практике:

  1. Код с указанием типов пишется в файле .pyx.
  2. Создается setup.py для компиляции.
  3. В результате получается скомпилированный модуль, который импортируется в 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 (примерно)