CPython

редактировать
Эталонная реализация Python
CPython
Логотип Python и wordmark.svg
Автор (ы) Гвидо ван Россум
Разработчик ( s) разработчики ядра Python и сообщество Python при поддержке Python Software Foundation
Первоначальный выпуск26 января 1994 г.; 26 лет назад (1994-01-26)
Стабильный выпуск 3.8.6 / 24 сентября 2020 г.; 36 дней назад (2020-09-24)
Репозиторий https://github.com/python/cpython
Написано наC, Python
Платформа 42 платформы; см. § Распространение
Доступно наанглийском
Типе интерпретатор языка программирования Python
Лицензия Лицензия Python Software Foundation
Веб-сайтwww.python.org

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

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

Содержание

  • 1 Дизайн
  • 2 История
    • 2.1 Unladen Swallow
      • 2.1.1 История выпусков Unladen Swallow
  • 3 Распространение
    • 3.1 Enterprise Linux
  • 4 Альтернативы
  • 5 Ссылки
  • 6 Внешние ссылки

Дизайн

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

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

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

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

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

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

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

История

Unladen Swallow

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

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

Проект спонсировался Google, и владельцы проекта, Томас Воутерс, Джеффри Яскин и Коллин Винтер, являются штатными сотрудниками Google, однако большинство проектов участники не были сотрудниками Google. Незагруженная Swallow была размещена на Google Code.

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

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

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

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

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

История выпусков Unladen Swallow

  • 1 квартал 2009 г.
  • 2 квартал 2009 г.
  • 3 квартал 2009 г. : уменьшить использование памяти, повысить скорость

Распространение

Поддерживаемые платформы включают:

Unix-like
Special and embedded
Другое

PEP 11 перечисляет платформы, которые не поддерживаются в CPython Фонд программного обеспечения Python. Эти платформы все еще могут поддерживаться внешними портами. Эти порты включают:

  • AtheOS (не поддерживается с версии 2.6)
  • BeOS (не поддерживается с версии 2.6)
  • DOS (не поддерживается с версии 2.0)
  • IRIX 4 (не поддерживается с версии 2.3)
  • IRIX 5 и новее (не поддерживается с версии 3.2, 3.7)
  • Mac OS 9 (не поддерживается с версии 2.4)
  • MINIX (не поддерживается с версии 2.3)
  • VMS (не поддерживается с версии 3.3)
  • OS / 2 (не поддерживается с версии 3.3)
  • RISC OS (не поддерживается с версии 3.0)
  • 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. Эти порты включают:

Enterprise Linux

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

Enterprise Linux
Версия дистрибутиваРаспространение конец жизненного цикла версия Python
Ubuntu 20.04 LTS (Focal Fossa)TBDТекущая стабильная версия: 3.8
Ubuntu 18.04 LTS (Bionic Beaver)2028-04Старая версия, больше не поддерживается: 2.7Старая версия, но все еще поддерживается: 3.6
Ubuntu 16.04 LTS (Xenial Xerus)2021-04Старая версия, больше не поддерживается: 2.7Старая версия, все еще поддерживается: 3.5
Debian 102024Старая версия, больше не поддерживается: 2.7Старая версия, но все еще поддерживается: 3.7
Debian 92022-06Старая версия, больше не поддерживается: 2.7Старая версия, но все еще поддерживается: 3.5
Debian 82020-06-30Старая версия, больше не поддерживается: 2.7Старая версия, больше не поддерживается: 3.4
Red Hat Enterprise Linux 82029Старая версия, больше не поддерживается: 2.7Старая версия ion, но все еще поддерживается: 3.6
Red Hat Enterprise Linux 72024-11-30Старая версия, больше не поддерживается: 2.7
Red Hat Enterprise Linux 62024-11-30Старая версия, больше не поддерживается: 2.6
Red Hat Enterprise Linux 52020-11-30Старая версия, больше не поддерживается: 2.4
CentOS 72024-06-30Старая версия, больше не поддерживается: 2.7
CentOS 62020-11-30Старая версия, больше не поддерживается: 2.6
SUSE Linux Enterprise Server 152031-07-31Старая версия, больше не поддерживается: 2.7Старая версия, но все еще поддерживается: 3.6
SUSE Linux Enterprise Server 122027-10-31Старая версия, больше не поддерживается: 2.7
SUSE Linux Enterprise Server 112022-03-31Старая версия, больше не поддерживается: 2.7
Условные обозначения: Старая версия Старая версия, все еще поддерживается Последняя версия Последняя предварительная версия Будущий выпуск

.

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

CPython - одна из нескольких «производительных» реализаций Python, включая: Jython, написанный на Java для Виртуальная машина Java (JVM), PyPy, написанная на RPython и переведенная на C, и IronPython, написанная на C # для Common Language Infrastructure. Есть также несколько экспериментальных реализаций.

Ссылки

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

Последняя правка сделана 2021-05-13 12:04:32
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте