Поиск…


замечания

Что такое Китон?

Язык программирования Cython обогащает Python C-подобным статическим набором текста, возможностью прямого вызова функций C и несколькими другими функциями. Это позволяет достичь уровня C-уровня при использовании синтаксиса, подобного Python.

Как это работает?

Код Cython скомпилирован с использованием компилятора cython source-to-source для создания кода C или C ++, который, в свою очередь, может быть скомпилирован с использованием компилятора C. Это позволяет создавать расширения, которые могут быть импортированы из Python или исполняемых файлов.

Основной прирост производительности Cython может достигнуть, в отличие от чистых основ Python, минуя API CPython. Например, при добавлении двух целых чисел Python выполняет проверку типа для каждой переменной, находит функцию добавления, которая удовлетворяет найденным типам и вызывает эту функцию. В C-образном C-образном коде типы уже известны, и выполняется только один вызов функции. Следовательно, Китон особенно близок к математическим проблемам, в которых типы понятны.

Как использовать его для ускорения моего кода?

Обычный пример использования при попытке ускорить работу программы с помощью Cython заключается в том, чтобы профилировать код и перемещать вычислительно дорогие детали в компилируемые модули Cython. Это позволяет сохранить синтаксис Python для большей части кода и применить ускорение там, где это наиболее необходимо.

Установка Cython

Для использования Cython необходимы две вещи. Сам пакет Cython, который содержит cython source-to-source и Cython, взаимодействует с несколькими библиотеками C и Python (например, numpy). Чтобы скомпилировать код C, сгенерированный компилятором cython , необходим компилятор C.

Шаг 1: Установка Cython

Система Агностик

Cython можно установить с несколькими системными системами управления пакетами. Они включают:

  1. PyPI через pip или easy_install:

    $ pip install cython
    $ easy_install cython
    
  2. anaconda используя conda:

    $ conda install cython
    
  3. Enthought canopy с помощью менеджера пакетов enpkg:

    $ enpkg cython
    

Также исходный код можно загрузить из github и установить вручную, используя:

$ python setup.py install

Ubuntu, Debian

Для Ubuntu cython пакеты cython и cython3 . Обратите внимание, что они предоставляют более старую версию, чем упомянутые выше параметры установки.

$ apt-get install cython cython3

Windows

Для Windows файл .whl, который может быть установлен с помощью pip, предоставляется третьей стороной. Подробные сведения об установке файла .whl в Windows можно найти здесь .


Шаг 2. Установка компилятора C

Для компиляции файлов C, созданных Cython, необходим компилятор для C и C ++. Компилятор gcc рекомендуется и может быть установлен следующим образом.

Ubuntu, Debian

build-essential пакет содержит все необходимое. Он может быть установлен из репозиториев, используя:

$ sudo apt-get install build-essential

MAC

Инструменты разработчика XCode содержат компилятор gcc.

Windows

MinGW (Minimalist GNU для Windows) содержит версию gcc для Windows. Также можно использовать компилятор из Visual Studio.

Привет, мир

Файл Cython pyx необходимо перевести на C-код ( cythonized ) и скомпилировать, прежде чем он будет использоваться с Python. Общий подход заключается в создании модуля расширения, который затем импортируется в программу Python.

Код

В этом примере мы создаем три файла:

  • hello.pyx содержит код Cython.
  • test.py - это скрипт Python, который использует расширение hello.
  • setup.py используется для компиляции кода Cython.

hello.pyx

from libc.math cimport pow

cdef double square_and_add (double x):
    """Compute x^2 + x as double.

    This is a cdef function that can be called from within
    a Cython program, but not from Python.
    """
    return pow(x, 2.0) + x

cpdef print_result (double x):
    """This is a cpdef function that can be called from Python."""
    print("({} ^ 2) + {} = {}".format(x, x, square_and_add(x)))

test.py

# Import the extension module hello.
import hello

# Call the print_result method 
hello.print_result(23.0)

setup.py

from distutils.core import Extension, setup
from Cython.Build import cythonize

# define an extension that will be cythonized and compiled
ext = Extension(name="hello", sources=["hello.pyx"])
setup(ext_modules=cythonize(ext))

составление

Это можно сделать, используя cython hello.pyx чтобы перевести код на C, а затем скомпилировать его с помощью gcc . Более простой способ - позволить distutils справиться с этим:

$ ls
hello.pyx  setup.py  test.py
$ python setup.py build_ext --inplace
$ ls
build  hello.c  hello.cpython-34m.so  hello.pyx  setup.py  test.py

Файл общего объекта (.so) можно импортировать и использовать из Python, так что теперь мы можем запустить test.py :

$ python test.py
(23.0 ^ 2) + 23.0 = 552.0 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow