Язык программирования 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 pyx необходимо перевести на C-код ( cythonized ) и скомпилировать, прежде чем он будет использоваться с Python. Общий подход заключается в создании модуля расширения, который затем импортируется в программу Python.
В этом примере мы создаем три файла:
hello.pyx
содержит код Cython. test.py
- это скрипт Python, который использует расширение hello. setup.py
используется для компиляции кода Cython. 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)))
# Import the extension module hello.
import hello
# Call the print_result method
hello.print_result(23.0)
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
Для использования Cython необходимы две вещи. Сам пакет Cython, который содержит cython
source-to-source и Cython, взаимодействует с несколькими библиотеками C и Python (например, numpy). Чтобы скомпилировать код C, сгенерированный компилятором cython
, необходим компилятор C.
Cython можно установить с несколькими системными системами управления пакетами. Они включают:
PyPI через pip или easy_install:
$ pip install cython
$ easy_install cython
anaconda используя conda:
$ conda install cython
Enthought canopy с помощью менеджера пакетов enpkg:
$ enpkg cython
Также исходный код можно загрузить из github и установить вручную, используя:
$ python setup.py install
Для Ubuntu cython
пакеты cython
и cython3
. Обратите внимание, что они предоставляют более старую версию, чем упомянутые выше параметры установки.
$ apt-get install cython cython3
Для Windows файл .whl, который может быть установлен с помощью pip, предоставляется третьей стороной. Подробные сведения об установке файла .whl в Windows можно найти здесь .
Для компиляции файлов C, созданных Cython, необходим компилятор для C и C ++. Компилятор gcc рекомендуется и может быть установлен следующим образом.
build-essential
пакет содержит все необходимое. Он может быть установлен из репозиториев, используя:
$ sudo apt-get install build-essential
Инструменты разработчика XCode содержат компилятор gcc.
MinGW (Minimalist GNU для Windows) содержит версию gcc для Windows. Также можно использовать компилятор из Visual Studio.