CPython
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Оригинальный автор(ы) | Гвидо ван Россум |
---|---|
Разработчик(и) | Основные разработчики Python и сообщество Python при поддержке Python Software Foundation. |
Первоначальный выпуск | 26 января 1994 г |
Стабильная версия | 3.12.0 [1] / 2 октября 2023 г |
Репозиторий | https://github.com/python/cpython |
Написано в | С , Питон |
Платформа | 42 платформы; см . § Распространение |
Доступно в | Английский |
Тип | Интерпретатор языка программирования Python |
Лицензия | Лицензия Фонда программного обеспечения Python |
Веб-сайт | www |
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 квартал 2009 г. [20]
- 2 квартал 2009 г. [21]
- Третий квартал 2009 г.: сокращение использования памяти, повышение скорости [22]
Распределение
[ редактировать ]Официально поддерживаемыми платформами уровня 1 являются Windows , Linux и macOS . (Также ОС Raspberry Pi и Linux для s390x на нижнем уровне.)
На других платформах есть рабочие реализации, в том числе: [23]
- Unix-подобный
- Специальные и встроенные
- Андроид
- Apple iOS (доступна поддержка устаревших Python 3.6 и 2.7)
- Блэкберри 10
- GP2X
- iPodLinux
- Нинтендо ДС
- GameCube
- ОС Symbian Series60
- Интернет-планшет Nokia 770
- Нокиа Н800
- Нокиа Н810
- Нокиа Н900
- Опенмоко
- Пальмовая ОС
- PlayStation 2
- PlayStation 3 (FreeBSD)
- Псион
- QNX
- Острый Заурус
- Xbox / XBMC
- Вксворкс
- Другой
- ЖДАТЬ
- ОС/390
- Windows Vista и более поздние версии
- з/ОС [ нужна ссылка ]
ПКП 11 [24] перечисляет платформы, которые не поддерживаются в CPython Python Software Foundation . Эти платформы по-прежнему могут поддерживаться внешними портами. Эти порты включают в себя:
- AtheOS (не поддерживается с версии 2.6)
- BeOS (не поддерживается с версии 2.6)
- DOS (не поддерживается с версии 2.0)
- IRIX 4 (не поддерживается с версии 2.3)
- IRIX 5 и более поздние версии (не поддерживается с версий 3.2, 3.7) [25]
- Mac OS 9 (не поддерживается с версии 2.4)
- MINIX (не поддерживается с версии 2.3)
- OpenVMS (не поддерживается с версии 3.3)
- OS/2 (не поддерживается с версии 3.3)
- ОС RISC (не поддерживается с версии 3.0)
- Windows XP (не поддерживается с версии 3.5)
- Windows 2000 (не поддерживается с версии 3.3)
- Windows 3.x (не поддерживается с версии 2.0)
- Windows 9x (не поддерживается с версии 2.6)
- Windows NT4 (не поддерживается с версии 2.6)
Внешние порты, не интегрированные в официальную версию CPython от Python Software Foundation, со ссылками на основной сайт разработки, часто включают дополнительные модули для функций, специфичных для платформы, таких как графический и звуковой API для PSP и SMS, а также API камеры для S60. Эти порты включают в себя:
- Друг : AmigaPython [26]
- IBM i : iSeriesPython [27]
- DOS с использованием DJGPP : PythonD [28]
- МорфОС : Питон 2 и 3 [29]
- PlayStation Portable : Stackless Python для PSP [30]
- ОС Symbian : Python для S60
- Windows CE / Pocket PC : порт Python для Windows CE [31]
- OpenVMS : порты Python 3.x поддерживаются VSI. [32]
Корпоративный Linux
[ редактировать ]Эти версии Python распространяются вместе с поддерживаемыми в настоящее время корпоративными дистрибутивами Linux. [33] Статус поддержки Python в таблице относится к поддержке со стороны основной группы Python, а не со стороны сопровождающего дистрибутива.
Версия дистрибутива | распространения Окончание срока службы | Версия Python | |
---|---|---|---|
Ubuntu 22.04 LTS (медуза-джемми) | 3.10 [1] | ||
Ubuntu 20.04 LTS (фокальная ямка) | 2030-04 [34] [ нужно обновить ] | [35] | [36] | 3.8.
Ubuntu 18.04 LTS (Бионический бобр) | 2028-04 [37] | [38] | 2.7.[39] | 3.6.
Ubuntu 16.04 LTS (Ксениал Ксерус) | 2021-04-30 [40] [ нужно обновить ] | [38] | 2.7.[39] | 3.5.
Дебиан 12 | 2028-06 [41] | [41] | 3.11.|
Дебиан 11 | 2026-06 [42] | [42] | 3.9.|
Дебиан 10 | 2024-06 [43] [ нужно обновить ] | [44] | 2.7.[45] [ нужно обновить ] | 3.7.
Дебиан 9 | 2022-06-30 [46] [ нужно обновить ] | [47] | 2.7.[48] | 3.5.
Ред Хэт Энтерпрайз Линукс 8 | 2029 | [49] | 2.7.3.6. |
Red Hat Enterprise Linux 7. | 2024-11-30 [50] | [51] | 2.7.|
ЦентОС 8 | 2029-05-31 | 2.7. | 3.6. |
ЦентОС 7 | 2024-06-30 [ нужно обновить ] | [52] | 2.7.|
SUSE Linux Enterprise Server 15 | 2031-07-31 | [53] | 2.7.3.6. |
SUSE Linux Enterprise Server 12 | 2027-10-31 | [54] | 2.7.|
SUSE Linux Enterprise Server 11 | 2022-03-31 [ нужно обновить ] | [54] | 2.7.|
Старая версия Старая версия, все еще поддерживается Последняя версия |
Альтернативы
[ редактировать ]«производственного качества», CPython — одна из нескольких реализаций Python включая: Jython , написанный на Java для виртуальной машины Java (JVM); PyPy , написанный на RPython и переведенный на C; и IronPython , написанный на C# для Common Language Infrastructure . Есть также несколько экспериментальных реализаций. [55]
Ссылки
[ редактировать ]- ^ Томас Воутерс (2 октября 2023 г.). «Python 3.12.0 (окончательная версия) уже здесь» .
- ^ «Инициализация, финализация и потоки» . Документация Python v3.8.3 . Проверено 4 июня 2020 г.
- ^ Джейк Эдж (15 августа 2023 г.). «Переводчик ГИЛ» . ЛВН . Проверено 13 января 2024 г.
- ^ «PEP 684 — GIL для каждого интерпретатора | peps.python.org» . Проверено 13 января 2024 г.
- ^ «PEP 703 — сделать глобальную блокировку интерпретатора необязательной в CPython | peps.python.org» . peps.python.org . Проверено 17 сентября 2023 г.
- ^ «PEP 719 — График выпуска Python 3.13 | peps.python.org» . peps.python.org . Проверено 17 сентября 2023 г.
- ^ Пол, Райан (26 марта 2009 г.). «Отчет Ars Technica о целях Unladen Swallow» . Arstechnica.com . Проверено 19 августа 2011 г.
- ^ Перейти обратно: а б Винтер, Коллин; Ясскин, Джеффри; Клекнер, Рид (17 марта 2010 г.). «PEP 3146 — объединение Unladen Swallow с CPython» . Python.org.
- ^ «Люди, работающие над Unladen Swallow» . Архивировано из оригинала 29 октября 2015 г. Проверено 8 августа 2019 г.
- ^ «Страница проекта Unladen Swallow» . Проверено 19 августа 2011 г.
- ^ «Проблема 9410: добавление оптимизации Unladen Swallow в рассол Python 3. — Трекер Python» . bugs.python.org . Проверено 8 августа 2019 г.
- ^ «Сообщение о comp.lang.python» . Проверено 19 августа 2011 г.
- ^ «Беснагруженная ласточка | Группы Google» . Проверено 19 августа 2011 г.
- ^ «Пост на Reddit от коммиттера Unladen» . Реддит.com. 24 июня 2010 г. Проверено 19 августа 2011 г.
- ^ Винтер, Коллин (8 ноября 2010 г.). «Текущий статус Unladen-Swallow» .
- ^ «Создание ветки релиза за четвертый квартал 2009 г.» . 26 января 2010 г. Проверено 19 августа 2011 г.
- ^ «Разработчики сосредоточены на слиянии с py3k-jit» . 13 июля 2010 г. Проверено 19 августа 2011 г.
- ^ «Базовая линия незагруженной ласточки» . Python.org . Проверено 19 августа 2011 г.
- ^ Клекнер, Рид (26 марта 2011 г.). «Ретроспектива незагруженной ласточки» . QINSB не является блогом о программном обеспечении (qinsb.blogspot.com) .
- ^ «Беснагруженная ласточка 1 квартал 2009 г.» . unladen-swallow, более быстрая реализация Python . Проверено 19 октября 2012 г.
- ^ «Беснагруженная ласточка 2009кв.» . unladen-swallow, более быстрая реализация Python . Проверено 19 октября 2012 г.
- ^ «Беснагруженная ласточка 3 квартал 2009 г.» . unladen-swallow, более быстрая реализация Python . Проверено 19 октября 2012 г.
- ^ «Реализации Python» . Проверено 19 июля 2012 г.
- ^ «PEP 11 — Удаление поддержки малоиспользуемых платформ» . Python.org . Проверено 8 августа 2019 г.
- ^ «Ирикс все еще поддерживается?» . 14 февраля 2009 г.
- ^ АмигаПитон
- ^ iSeriesPython
- ^ ПитонД
- ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 и 3
- ^ Стековый Python для PSP
- ^ Порт Python для Windows CE
- ^ «Питон» . ВСИ . Проверено 31 августа 2021 г.
- ^ «Жизненные циклы поддержки корпоративных дистрибутивов Linux» . Архивировано из оригинала 30 августа 2022 г. Проверено 15 октября 2017 г.
- ^ «Цикл выпуска Ubuntu» . Убунту . Проверено 18 января 2021 г.
- ^ «После прекращения выпуска Python 2 Ubuntu 20.04 LTS движется вместе с удалением Python 2 — Phoronix» . phoronix.com . Проверено 01 апреля 2020 г.
- ^ «Бинарный пакет «python3» в Ubuntu Focus» . Launchpad.net .
- ^ «Ubuntu 18.04 продлен до 2028 года» . ServerWatch.com. 15 ноября 2018 г. Проверено 9 сентября 2019 г.
- ^ Перейти обратно: а б «Пакет Python-по умолчанию: Ubuntu» . ООО «Каноникал» 08.06.2018 . Проверено 8 июня 2018 г.
- ^ Перейти обратно: а б «Пакет Python3-по умолчанию: Ubuntu» . ООО «Каноникал» 08.06.2018 . Проверено 8 июня 2018 г.
- ^ Естественные науки, Школа компьютеров Университета Карнеги-Меллон. «Ubuntu 16.04 — прекращение эксплуатации в 2021 году — вычислительные мощности SCS — Университет Карнеги-Меллона» . Computing.cs.cmu.edu . Проверено 15 февраля 2021 г.
- ^ Перейти обратно: а б «Выпущен книжный червь Debian 12» . debian.org .
- ^ Перейти обратно: а б "Debian -- Новости -- Выпущен Debian 11 "яблочко"" . debian.org . Проверено 4 января 2022 г.
- ^ «LTS — Debian Wiki» . wiki.debian.org . Проверено 15 февраля 2021 г.
- ^ «Debian — Подробная информация о пакете Python в Buster» . packages.debian.org . Проверено 13 сентября 2019 г.
- ^ "Debian -- Новости -- Выпущен Debian 10 "buster"" . debian.org . Проверено 9 августа 2019 г.
- ^ «Debian — Новости — Срок службы долгосрочной поддержки Debian 8 подходит к концу» . debian.org . Проверено 15 февраля 2021 г.
- ^ «DistroWatch.com: Debian» . DistroWatch.com. 15 октября 2017 г. Проверено 15 октября 2017 г.
- ^ «Debian — Подробная информация о пакете Python3 в растянутом виде» . Проверено 19 декабря 2017 г.
- ^ «Python в RHEL 8» . Блог разработчиков Red Hat . 14.11.2018. Архивировано из оригинала 10 мая 2019 г. Проверено 10 мая 2019 г.
- ^ «Жизненный цикл Red Hat Enterprise Linux» . Портал для клиентов Red Hat . Проверено 01 апреля 2020 г.
- ^ «DistroWatch.com: Red Hat Enterprise Linux» . DistroWatch.com. 07.09.2017 . Проверено 15 октября 2017 г.
- ^ «DistroWatch.com: CentOS» . DistroWatch.com. 14 сентября 2017 г. Проверено 15 октября 2017 г.
- ^ «Примечания к выпуску | SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA» . suse.com . Проверено 8 августа 2019 г.
- ^ Перейти обратно: а б «DistroWatch.com: openSUSE» . DistroWatch.com. 14 октября 2017 г. Проверено 15 октября 2017 г.
- ^ Мартелли, Алекс (2006). Python в двух словах (2-е изд.). О'Рейли . стр. 5–7. ISBN 978-0-596-10046-9 .
Дальнейшее чтение
[ редактировать ]- Шоу, Энтони (2021). Внутреннее устройство CPython: ваше руководство по интерпретатору Python 3 . Настоящий Питон. ISBN 9781775093343 .