stringtranslate.com

CPython

CPythonэталонная реализация языка программирования Python . Написанный на C и Python, CPython является стандартной и наиболее широко используемой реализацией языка Python.

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

Дизайн

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

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

Однако GIL означает, что CPython не подходит для процессов, которые реализуют ресурсоемкие алгоритмы в коде Python, который потенциально может быть распределен по нескольким ядрам.

В реальных приложениях ситуации, когда GIL является существенным узким местом, довольно редки. Это связано с тем, что Python по своей сути является медленным языком и обычно не используется для операций с интенсивным использованием ЦП или операций, чувствительных ко времени. Python обычно используется на верхнем уровне и вызывает функции в библиотеках для выполнения специализированных задач. Эти библиотеки обычно не написаны на Python, и код Python в другом потоке может выполняться во время вызова одного из этих базовых процессов. Библиотека, не относящаяся к Python, вызываемая для выполнения ресурсоемкой задачи, не подпадает под действие GIL и может без ограничений одновременно выполнять множество потоков на нескольких процессорах.

Параллелизм кода Python может быть достигнут только с помощью отдельных процессов интерпретатора CPython, управляемых многозадачной операционной системой . Это усложняет взаимодействие между параллельными процессами Python , хотя модуль многопроцессорности несколько смягчает это; это означает, что приложения, которые действительно могут извлечь выгоду из одновременного выполнения кода Python, могут быть реализованы с ограниченными накладными расходами .

Наличие GIL упрощает реализацию CPython и упрощает реализацию многопоточных приложений, которые не получают преимуществ от одновременного выполнения кода Python. Однако без GIL многопроцессорные приложения должны гарантировать, что весь общий код является потокобезопасным.

Хотя было сделано много предложений по отмене GIL, общее мнение заключалось в том, что в большинстве случаев преимущества GIL перевешивают недостатки; в тех немногих случаях, когда GIL является узким местом, приложение должно быть построено на основе многопроцессорной структуры. Чтобы обеспечить больший параллелизм, в октябре 2023 года было выпущено улучшение, позволяющее использовать отдельный GIL для каждого субинтерпретатора в одном процессе Python, которое было описано как «потоки с возможностью совместного использования». [3] [4]

После нескольких дебатов в 2023 году был запущен проект, предлагающий сделать GIL необязательным для версии Python 3.13 [5] , выпуск которой запланирован на октябрь 2024 года. [6]

История

Ненагруженная ласточка

Unladen Swallow — это оптимизационная ветвь CPython, призванная быть полностью совместимой и значительно более быстрой. Компания стремилась достичь своих целей, дополнив специальную виртуальную машину CPython JIT-компилятором , созданным с использованием LLVM .

В проекте была поставлена ​​цель повысить скорость в пять раз по сравнению с CPython; [7] эта цель не была достигнута. [8]

Спонсором проекта выступила компания Google , а владельцы проекта Томас Воутерс, Джеффри Ясскин и Коллин Винтер являются штатными сотрудниками Google; однако большинство участников проекта не были сотрудниками Google. [9] Unladen Swallow размещалась на Google Code . [10]

Как и многие другие вещи, связанные с языком Python, название Unladen Swallow является отсылкой к Монти Пайтону , в частности, к шутке о скорости полета порожних ласточек в фильме «Монти Пайтон и Святой Грааль» .

Несмотря на то, что Unladen Swallow не достиг всех опубликованных целей, он все же создал некоторый код, который был добавлен в основную реализацию Python, например улучшения модуля cPickle. [11]

В июле 2010 года некоторые наблюдатели высказали предположения о том, мертв ли ​​проект или умирает, поскольку контрольный показатель четвертого квартала 2009 года еще не был опубликован. [12] Трафик в списке рассылки Unladen снизился с 500 сообщений в январе 2010 года до менее 10 в сентябре 2010 года . [13] Также сообщалось, что Unladen лишился финансирования со стороны Google. [14] В ноябре 2010 года один из основных разработчиков объявил, что «Джеффри и меня привлекли к другим проектам, более важным для Google». [15]

Ветка разработки четвертого квартала 2009 года была создана 26 января 2010 года, [16] но на сайте не было рекламы. Далее, что касается долгосрочных планов, а также поскольку проект пропустил выпуск Python 2.7, было принято Предложение по усовершенствованию Python (PEP) [8] , в котором предлагалось объединить Unladen Swallow со специальной веткой py3k-jit официального репозитория Python. . По состоянию на июль 2010 года эта работа продолжалась. [17] Это слияние заняло бы некоторое время, поскольку Unladen Swallow изначально был основан на Python 2.6 [18] с которым Python 3 нарушил совместимость ( более подробную информацию см. в Python 3000 ). Однако впоследствии PEP был отозван.

В начале 2011 года стало ясно, что проект остановлен. [19]

История релизов Unladen Swallow

Распределение

Официально поддерживаемыми платформами уровня 1 являются Windows , Linux и macOS . (Также ОС Raspberry Pi и Linux для s390x на нижнем уровне.)

На других платформах есть рабочие реализации, в том числе: [23]

Unix-подобный
Специальные и встроенные
Другой

В PEP 11 [24] перечислены платформы, которые не поддерживаются в CPython Python Software Foundation . Эти платформы по-прежнему могут поддерживаться внешними портами. Эти порты включают в себя:

Внешние порты, не интегрированные в официальную версию CPython от Python Software Foundation, со ссылками на основной сайт разработки, часто включают дополнительные модули для функций, специфичных для платформы, таких как графический и звуковой API для PSP и SMS, а также API камеры для S60. Эти порты включают в себя:

Корпоративный Linux

Эти версии Python распространяются вместе с поддерживаемыми в настоящее время корпоративными дистрибутивами Linux. [33] Статус поддержки Python в таблице относится к поддержке со стороны основной команды Python, а не со стороны сопровождающего дистрибутива.

Альтернативы

CPython — одна из нескольких реализаций Python «производственного качества», включая: Jython , написанный на Java для виртуальной машины Java (JVM), PyPy , написанный на RPython и переведенный на C, и IronPython , написанный на C# для общего языка. Инфраструктура . Есть также несколько экспериментальных реализаций. [55]

Рекомендации

  1. Томас Воутерс (2 октября 2023 г.). «Python 3.12.0 (окончательная версия) уже здесь».
  2. ^ «Инициализация, завершение и потоки» . Документация Python v3.8.3 . Проверено 4 июня 2020 г.
  3. Джейк Эдж (15 августа 2023 г.). «Переводчик GIL». ЛВН . Проверено 13 января 2024 г.
  4. ^ «PEP 684 — GIL для каждого интерпретатора | peps.python.org» . Проверено 13 января 2024 г.
  5. ^ «PEP 703 — сделать глобальную блокировку интерпретатора необязательной в CPython | peps.python.org» . peps.python.org . Проверено 17 сентября 2023 г.
  6. ^ «PEP 719 - График выпуска Python 3.13 | peps.python.org» . peps.python.org . Проверено 17 сентября 2023 г.
  7. ^ Пол, Райан (26 марта 2009 г.). «Отчет Ars Technica о целях Unladen Swallow». Arstechnica.com . Проверено 19 августа 2011 г.
  8. ^ аб Винтер, Коллин; Ясскин, Джеффри; Клекнер, Рид (17 марта 2010 г.). «PEP 3146 — объединение Unladen Swallow с CPython». Python.org.
  9. ^ «Люди, работающие над Unladen Swallow» . Архивировано из оригинала 29 октября 2015 г. Проверено 8 августа 2019 г.
  10. ^ "Страница проекта Unladen Swallow" . Проверено 19 августа 2011 г.
  11. ^ «Проблема 9410: Добавьте оптимизацию Unladen Swallow в рассол Python 3. — Трекер Python» . bugs.python.org . Проверено 8 августа 2019 г.
  12. ^ "Сообщение о comp.lang.python" . Проверено 19 августа 2011 г.
  13. ^ "Без груза Ласточка | Группы Google" . Проверено 19 августа 2011 г.
  14. ^ "Сообщение на Reddit коммиттера Unladen" . Реддит.com. 24 июня 2010 г. Проверено 19 августа 2011 г.
  15. Винтер, Коллин (8 ноября 2010 г.). «Текущий статус Unladen-Swallow».
  16. ^ «Создание ветки выпуска в четвертом квартале 2009 г.» . 26 января 2010 г. Проверено 19 августа 2011 г.
  17. ^ «Разработчики сосредоточены на слиянии с py3k-jit» . 13 июля 2010 г. Проверено 19 августа 2011 г.
  18. ^ "Базовая линия незагруженной ласточки" . Python.org . Проверено 19 августа 2011 г.
  19. Клекнер, Рид (26 марта 2011 г.). «Ретроспектива незагруженной ласточки». QINSB не является блогом о программном обеспечении (qinsb.blogspot.com) .
  20. ^ "Беснагруженная ласточка, первый квартал 2009 г." . unladen-swallow, более быстрая реализация Python . Проверено 19 октября 2012 г.
  21. ^ "Беснагруженная ласточка, второй квартал 2009 г." . unladen-swallow, более быстрая реализация Python . Проверено 19 октября 2012 г.
  22. ^ "Беснагруженная ласточка, 3 квартал 2009 г." . unladen-swallow, более быстрая реализация Python . Проверено 19 октября 2012 г.
  23. ^ "Реализации Python" . Проверено 19 июля 2012 г.
  24. ^ «PEP 11 — Удаление поддержки малоиспользуемых платформ» . Python.org . Проверено 8 августа 2019 г.
  25. ^ «Irix все еще поддерживается?». 14 февраля 2009 г.
  26. ^ АмигаПитон
  27. ^ iSeriesPython
  28. ^ ПитонД
  29. ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 и 3
  30. ^ Стековый Python для PSP
  31. ^ Порт Python для Windows CE
  32. ^ «Питон». ВСИ . Проверено 31 августа 2021 г.
  33. ^ «Жизненные циклы поддержки корпоративных дистрибутивов Linux» . Архивировано из оригинала 30 августа 2022 г. Проверено 15 октября 2017 г.
  34. ^ «Цикл выпуска Ubuntu». Убунту . Проверено 18 января 2021 г.
  35. ^ «После прекращения выпуска Python 2 Ubuntu 20.04 LTS движется вместе с удалением Python 2 — Phoronix» . phoronix.com . Проверено 01 апреля 2020 г.
  36. ^ «Бинарный пакет «python3» в Ubuntu Focus» . Launchpad.net .
  37. ^ «Выпуск Ubuntu 18.04 продлен до 2028 года» . ServerWatch.com. 15 ноября 2018 г. Проверено 9 сентября 2019 г.
  38. ^ ab «Пакет Python-по умолчанию: Ubuntu». ООО «Каноникал» 08.06.2018 . Проверено 8 июня 2018 г.
  39. ^ ab «Пакет Python3-по умолчанию: Ubuntu». ООО «Каноникал» 08.06.2018 . Проверено 8 июня 2018 г.
  40. ^ Наука, Компьютерная школа Университета Карнеги-Меллон. «Ubuntu 16.04 — прекращение эксплуатации в 2021 году — вычислительные мощности SCS — Университет Карнеги-Меллона» . Computing.cs.cmu.edu . Проверено 15 февраля 2021 г.
  41. ^ ab «Выпущен книжный червь Debian 12» . debian.org .
  42. ^ ab "Debian -- Новости -- Выпущен Debian 11 "яблочко"" . debian.org . Проверено 4 января 2022 г.
  43. ^ "LTS — Debian Wiki" . wiki.debian.org . Проверено 15 февраля 2021 г.
  44. ^ «Debian — Подробности о пакете Python в Buster» . packages.debian.org . Проверено 13 сентября 2019 г.
  45. ^ «Debian -- Новости -- Выпущен Debian 10 «buster»» . debian.org . Проверено 9 августа 2019 г.
  46. ^ «Debian — Новости — Долгосрочная поддержка Debian 8 подходит к концу» . debian.org . Проверено 15 февраля 2021 г.
  47. ^ "DistroWatch.com: Debian" . DistroWatch.com. 15 октября 2017 г. Проверено 15 октября 2017 г.
  48. ^ «Debian — Подробная информация о пакете Python3 в растянутом виде» . Проверено 19 декабря 2017 г.
  49. ^ «Python в RHEL 8» . Блог разработчиков Red Hat . 14 ноября 2018 г. Архивировано из оригинала 10 мая 2019 г. Проверено 10 мая 2019 г.
  50. ^ «Жизненный цикл Red Hat Enterprise Linux». Портал для клиентов Red Hat . Проверено 01 апреля 2020 г.
  51. ^ «DistroWatch.com: Red Hat Enterprise Linux» . DistroWatch.com. 07.09.2017 . Проверено 15 октября 2017 г.
  52. ^ "DistroWatch.com: CentOS" . DistroWatch.com. 14 сентября 2017 г. Проверено 15 октября 2017 г.
  53. ^ «Примечания к выпуску | SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA» . suse.com . Проверено 8 августа 2019 г.
  54. ^ ab "DistroWatch.com: openSUSE". DistroWatch.com. 14 октября 2017 г. Проверено 15 октября 2017 г.
  55. ^ Мартелли, Алекс (2006). Python в двух словах (2-е изд.). О'Рейли . стр. 5–7. ISBN 978-0-596-10046-9.

дальнейшее чтение

Внешние ссылки