Jump to content

Китон

Китон
Разработчик Роберт Брэдшоу, Стефан Бенель и др.
Впервые появился 28 июля 2007 г .; 17 лет назад ( 28 июля 2007 ) [1]
Стабильная версия 3.0.10 [2]  Отредактируйте это в Викиданных (30 марта 2024 г .; 4 месяца назад ( 30 марта 2024 г. ) ) [±]
Предварительный выпуск 3.0.0 beta 2 (27 марта 2023 г .; 16 месяцев назад ( 27.03.2023 ) [3] ) [±]
Язык реализации Питон
ТЫ Windows , macOS , Linux
Лицензия Лицензия Апач 2.0
Расширения имен файлов .pyx, .pxd, .pxi [4]
Веб-сайт цитон .org Отредактируйте это в Викиданных
Под влиянием
С , Питон

Cython ( / ˈ s θ ɒ n / ) — это надмножество языка программирования Python сравнимую с производительностью C. , которое позволяет разработчикам писать код Python (с дополнительными синтаксическими расширениями, основанными на C), который обеспечивает производительность , [5] [6]

Cython — это компилируемый язык , который обычно используется для создания модулей расширения CPython . Аннотированный Python-подобный код компилируется в C, а затем автоматически оборачивается кодом интерфейса , создавая модули расширения, которые можно загружать и использовать обычным кодом Python с помощью оператора импорта, но со значительно меньшими вычислительными затратами во время выполнения . Cython также облегчает упаковку независимого кода C или C++ в модули, импортируемые в Python.

Cython написан на Python и C и работает в Windows , macOS и Linux , создавая исходные файлы C, совместимые с CPython 2.6, 2.7, 3.3 и более поздних версий. Исходный код Cython, который Cython компилирует (в C), может использовать синтаксис Python 2 и Python 3, по умолчанию используется синтаксис Python 2 в Cython 0.x (и синтаксис Python 3 в Cython 3.x). Значение по умолчанию можно переопределить (например, в комментарии к исходному коду) на синтаксис Python 3 (или 2). Поскольку синтаксис Python 3 изменился в последних версиях, Cython может быть не в курсе последних дополнений. Cython имеет «встроенную поддержку большей части языка C++» и «компилирует почти весь существующий код Python». [7]

Cython 3.0.0 был выпущен 17 июля 2023 года. [8]

Cython работает, создавая стандартный модуль Python. Однако его поведение отличается от стандартного Python тем, что код модуля, изначально написанный на Python, транслируется на C. Хотя полученный код работает быстро, он выполняет множество вызовов интерпретатора CPython и стандартных библиотек CPython для выполнения реальной работы. Выбор этого варианта значительно сэкономил время разработки Cython, но модули зависят от интерпретатора Python и стандартной библиотеки.

Хотя большая часть кода основана на C, обычно требуется небольшой загрузчик-заглушка, написанный на интерпретируемом Python (если только целью не является создание загрузчика, полностью написанного на C, что может включать работу с недокументированными внутренними компонентами CPython). Однако это не является серьезной проблемой благодаря наличию интерпретатора Python. [9]

Cython имеет внешний интерфейс функций для вызова C / C++ подпрограмм и возможность объявлять статический тип параметров и результатов подпрограмм, локальных переменных и атрибутов класса.

Программа Cython, реализующая тот же алгоритм, что и соответствующая программа Python, может потреблять меньше вычислительных ресурсов, таких как основная память и циклы обработки, из-за различий между моделями выполнения CPython и Cython. Базовая программа Python загружается и выполняется виртуальной машиной CPython , поэтому как среда выполнения, так и сама программа потребляют вычислительные ресурсы. Программа Cython компилируется в код C, который затем компилируется в машинный код, поэтому виртуальная машина используется лишь кратковременно при загрузке программы. [10] [11] [12] [13]

В компании Cython работают:

  • Оптимистичные оптимизации
  • Вывод типа (необязательно)
  • Низкие накладные расходы в структурах управления
  • Низкие накладные расходы на вызов функций [14] [15]

Производительность зависит как от того, какой код C генерирует Cython, так и от того, как этот код компилируется компилятором C. [16]

Cython — производное от языка Pyrex , но он поддерживает больше функций и оптимизаций, чем Pyrex. [17] [18] Cython был отделен от Pyrex в 2007 году разработчиками пакета компьютерной алгебры Sage , поскольку они были недовольны ограничениями Pyrex и не могли получить исправления, принятые сопровождающим Pyrex Грегом Юингом, который предполагал гораздо меньшие возможности для своего инструмента, чем разработчики Sage в разум. Затем они создали форк Pyrex как SageX. Когда они обнаружили, что люди загружают Sage только для того, чтобы получить SageX, а разработчики других пакетов (включая Стефана Бенеля, который поддерживает XML- библиотеку LXML) также поддерживают вилки Pyrex, SageX был отделен от проекта Sage и объединен с cython-lxml стать Китоном. [19]

Файлы Cython имеют .pyx расширение. По своей сути код Cython выглядит точно так же, как код Python. Однако, в то время как стандартный Python является динамически типизированным , в Cython типы могут быть предоставлены опционально, что позволяет повысить производительность и преобразовать циклы в циклы C, где это возможно. Например:

# The argument will be converted to int or raise a TypeError.
def primes(int kmax): 

    # These variables are declared with C types.
    cdef int n, k, i 

    # Another C type 
    cdef int p[1000]
 
    # A Python type
    result = [] 

    if kmax > 1000:
        kmax = 1000

    k = 0
    n = 2

    while k < kmax:
        i = 0

        while i < k and n % p[i] != 0:
            i = i + 1

        if i == k:
            p[k] = n
            k = k + 1
            result.append(n)

        n = n + 1

    return result
Привет, мир на Cython

Пример программы hello world для Cython более сложен, чем на большинстве языков, поскольку он взаимодействует с API Python C и setuptools или другие PEP517 . объекты расширения, соответствующие [ жаргон ] Для базового проекта требуется как минимум три файла:

  • А setup.py файл для вызова setuptools процесс сборки, который генерирует модуль расширения
  • Основная программа Python для загрузки модуля расширения.
  • Исходный файл(ы) Cython

Следующие листинги кода демонстрируют процесс сборки и запуска:

# hello.pyx - Python module, this code will be translated to C by Cython.
def say_hello():
    print("Hello World!")
# launch.py - Python stub loader, loads the module that was made by Cython.

# This code is always interpreted, like normal Python.
# It is not compiled to C.

import hello
hello.say_hello()
# setup.py - unnecessary if not redistributing the code, see below
from setuptools import setup
from Cython.Build import cythonize

setup(name = "Hello world app",
      ext_modules = cythonize("*.pyx"))

Эти команды собирают и запускают программу:

$ python setup.py build_ext --inplace
$ python launch.py

Использование в блокноте IPython/Jupyter

[ редактировать ]

Более простой способ начать работу с Cython — использовать IPython из командной строки (или через консоль Python в браузере, называемую Jupyter Notebook ):

In [1]: %load_ext Cython

In [2]: %%cython
   ...: def f(n):
   ...:     a = 0
   ...:     for i in range(n):
   ...:         a += i
   ...:     return a
   ...: 
   ...: cpdef g(int n):
   ...:     cdef long a = 0
   ...:     cdef int i
   ...:     for i in range(n):
   ...:         a += i
   ...:     return a
   ...: 

In [3]: %timeit f(1000000)
10 loops, best of 3: 26.5 ms per loop

In [4]: %timeit g(1000000)
1000 loops, best of 3: 279 µs per loop

что дает улучшение в 95 раз по сравнению с версией на чистом Python. Более подробную информацию по этому вопросу можно найти на официальной странице быстрого запуска. [20]

Использование

[ редактировать ]

Cython особенно популярен среди научных пользователей Python. [12] [21] [22] где у него «идеальная аудитория», по словам создателя Python Гвидо ван Россума . [23] Особо следует отметить:

Область применения Cython не ограничивается только численными вычислениями. Например, набор инструментов lxml XML написан в основном на Cython, и, как и его предшественник Pyrex, Cython используется для предоставления привязок Python для многих библиотек C и C++, таких как библиотека обмена сообщениями ZeroMQ . [28] Cython также можно использовать для разработки параллельных программ для с многоядерными процессорами машин ; эта функция использует библиотеку OpenMP .

См. также

[ редактировать ]
  1. ^ Бенель, Стефан (2008). «Компилятор Cython для C-расширений в Python» . EuroPython (28 июля 2007 г.: официальный запуск Cython). Вильнюс/Летува.
  2. ^ «Выпуск 3.0.10» . 30 марта 2024 г. Проверено 22 апреля 2024 г.
  3. ^ Журнал изменений Cython , cython, 15 мая 2023 г. , получено 19 мая 2023 г.
  4. ^ «Основы языка — документация Cython 3.0.0a9» . cython.readthedocs.io . Проверено 9 сентября 2021 г.
  5. ^ «Cython — обзор — Документация Cython 0.19.1» . Docs.cython.org . Проверено 21 июля 2013 г.
  6. ^ Смит, Курт (2015). Cython: Руководство для программистов Python . О'Рейли Медиа . ISBN  978-1-4919-0155-7 .
  7. ^ «Часто задаваемые вопросы · cython/cython Wiki» . Гитхаб . Проверено 11 января 2023 г.
  8. ^ «Журнал изменений Cython» . cython.org . Проверено 21 июля 2023 г.
  9. ^ «Базовое руководство — документация Cython 3.0a6» . cython.readthedocs.io . Проверено 11 декабря 2020 г.
  10. ^ Олифант, Трэвис (20 июня 2011 г.). «Техническое открытие: ускорение Python (NumPy, Cython и Weave)» . Technicaldiscovery.blogspot.com . Проверено 21 июля 2013 г.
  11. ^ Бенель, Стефан; Брэдшоу, Роберт; Ситро, Крейг; Дальчин, Лисандро; Сельеботн, Даг Сверре; Смит, Курт (2011). «Ситон: лучшее из обоих миров» . Вычисления в науке и технике . 13 (2): 31–39. Бибкод : 2011CSE....13b..31B . дои : 10.1109/MCSE.2010.118 . hdl : 11336/13103 . S2CID   14292107 .
  12. ^ Jump up to: а б Сельебот, Даг Сверре (2009). «Быстрые численные вычисления с Cython» . Материалы 8-й конференции «Питон в науке» (SciPy 2009) : 15–22.
  13. ^ Уилберс, И.; Лангтанген, HP; Эдегард, О. (2009). Скаллеруд, Б.; Андерссон, Хай (ред.). «Использование Cython для ускорения числовых программ на Python» . Труды MekIT'09 : 495–512. Архивировано из оригинала (PDF) 4 января 2017 года . Проверено 14 июня 2011 г.
  14. ^ «тесты оболочек для нескольких генераторов оболочек Python (кроме Cython)» . Архивировано из оригинала 4 апреля 2015 года . Проверено 28 мая 2010 г.
  15. ^ «тесты оболочек для Cython, Boost.Python и PyBindGen» . Архивировано из оригинала 3 марта 2016 года . Проверено 28 мая 2010 г.
  16. ^ «Cython: C-расширения для Python» . Проверено 22 ноября 2015 г.
  17. ^ «Различия между Цитоном и Пирексом» . Гитхаб .
  18. ^ Юинг, Грег (21 марта 2011 г.). «Re: Информация о саммите VM и Language для тех, кто не в Pycon (и тех, кто там!)» (Сообщение в электронный список рассылки python-dev) . Проверено 5 мая 2011 г.
  19. ^ Говорит разработчик Sage и Cython Роберт Брэдшоу на конференции Sage Days 29 (22 марта 2011 г.). «Ситон: прошлое, настоящее и будущее» . Архивировано из оригинала 21 декабря 2021 года . Проверено 5 мая 2011 г. - через YouTube . {{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  20. ^ «Создание кода Cython» . cython.readthedocs.io . Проверено 24 апреля 2017 г. .
  21. ^ «inSCIght: Подкаст по научным вычислениям» (серия 6). Архивировано из оригинала 10 октября 2014 года . Проверено 29 мая 2011 г.
  22. ^ Миллман, Джаррод; Айвазис, Михаил (2011). «Python для ученых и инженеров» . Вычисления в науке и технике . 13 (2): 9–12. Бибкод : 2011CSE....13b...9M . дои : 10.1109/MCSE.2011.36 .
  23. ^ Гвидо Ван Россум (21 марта 2011 г.). «Re: Информация о саммите VM и Language для тех, кто не в Pycon (и тех, кто там!)» (Сообщение в электронный список рассылки python-dev) . Проверено 5 мая 2011 г.
  24. ^ Эрокал, Бурчин; Штейн, Уильям (2010). «Проект Sage: объединение бесплатного математического программного обеспечения для создания жизнеспособной альтернативы Magma, Maple, Mathematica и MATLAB». Математическое программное обеспечение – ICMS 2010 (PDF) . Конспекты лекций по информатике. Том. 6327. Шпрингер Берлин/Гейдельберг. стр. 12–27. CiteSeerX   10.1.1.172.624 . дои : 10.1007/978-3-642-15582-6_4 . ISBN  978-3-642-15581-9 . {{cite book}}: |journal= игнорируется ( помогите )
  25. ^ «Примечания к выпуску SciPy 0.7.2» . Архивировано из оригинала 4 марта 2016 года . Проверено 29 мая 2011 г.
  26. ^ Педрегоса, Фабиан; Варокво, Гаэль; Грамфор, Александр; Мишель, Винсент; Тирион, Бертран; Гризель, Оливье; Блондель, Матье; Преттенхофер, Питер; Вайс, Рон; Дюбур, Винсент; Вандерплас, Джейк; Пассос, Александр; Курнапо, Дэвид (2011). «Scikit-learn: машинное обучение на Python». Журнал исследований машинного обучения . 12 :28:25–28:30. arXiv : 1201.0490 . Бибкод : 2011JMLR...12.2825P .
  27. ^ «Quora все еще работает на PyPy?» .
  28. ^ «ØMQ: привязка Python» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2eec34f867cc086c8ec1bf47676adc83__1721479320
URL1:https://arc.ask3.ru/arc/aa/2e/83/2eec34f867cc086c8ec1bf47676adc83.html
Заголовок, (Title) документа по адресу, URL1:
Cython - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)