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 необязательным в версии 3.13 Python [5] , выпуск которой запланирован на октябрь 2024 года [6].

История

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

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

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

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

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

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

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

Ветка разработки Q4 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 — это Linux для 64-битной Intel с использованием набора инструментов GCC, macOS для 64-битной Intel и ARM и Microsoft Windows для 32- и 64-битной Intel. Официальная поддержка уровня 2 существует для Linux для 64-битной ARM, wasm32 ( Web Assembly ) с поддержкой среды выполнения WASI и Linux для 64-битной Intel с использованием набора инструментов clang. Официально поддерживаемые системы уровня 3 включают 64-битную ARM Windows, 64-битную iOS, Raspberry Pi OS (Linux для armv7 с жестким float), Linux для 64-битной PowerPC в режиме little-endian и 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# для Common Language Infrastructure . Существует также несколько экспериментальных реализаций. [55]

Ссылки

  1. ^ https://www.python.org/downloads/release/python-3130/. {{cite web}}: Отсутствует или пусто |title=( помощь )
  2. ^ "Инициализация, финализация и потоки". Документация Python v3.8.3 . Получено 2020-06-04 .
  3. ^ Джейк Эдж (15 августа 2023 г.). "GIL для каждого переводчика". LWN . Получено 13.01.2024 .
  4. ^ "PEP 684 – GIL для каждого интерпретатора | peps.python.org" . Получено 13.01.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.09.2023 .
  7. ^ Пол, Райан (2009-03-26). "Отчет Ars Technica о целях Unladen Swallow". Arstechnica.com . Получено 2011-08-19 .
  8. ^ ab Winter, Collin; Yasskin, Jeffrey; Kleckner, Reid (2010-03-17). "PEP 3146 - Объединение Unladen Swallow с CPython". Python.org.
  9. ^ "Люди, работающие над Unladen Swallow". Архивировано из оригинала 2015-10-29 . Получено 2019-08-08 .
  10. ^ "Страница проекта Unladen Swallow" . Получено 2011-08-19 .
  11. ^ "Проблема 9410: Добавить оптимизации Unladen Swallow в pickle Python 3. - Трекер Python". bugs.python.org . Получено 08.08.2019 .
  12. ^ "Сообщение о comp.lang.python" . Получено 2011-08-19 .
  13. ^ "Unladen Swallow | Google Groups" . Получено 2011-08-19 .
  14. ^ "сообщение на reddit от коммиттера Unladen". Reddit.com. 2010-06-24 . Получено 2011-08-19 .
  15. Winter, Collin (8 ноября 2010 г.). «Текущее состояние Unladen-Swallow».
  16. ^ "Создание ветки релиза 2009 Q4". 2010-01-26 . Получено 2011-08-19 .
  17. ^ "Разработчики сосредоточены на слиянии с py3k-jit". 2010-07-13 . Получено 2011-08-19 .
  18. ^ "Базовая линия Unladen Swallow". Python.org . Получено 2011-08-19 .
  19. ^ Клекнер, Рид (26 марта 2011 г.). "Unladen Swallow Retrospective". QINSB не является блогом о программном обеспечении (qinsb.blogspot.com) .
  20. ^ "Unladen Swallow 2009Q1". unladen-swallow, Более быстрая реализация Python . Получено 19 октября 2012 г.
  21. ^ "Unladen Swallow 2009Q2". unladen-swallow, Более быстрая реализация Python . Получено 19 октября 2012 г.
  22. ^ "Unladen Swallow 2009Q3". unladen-swallow, Более быстрая реализация Python . Получено 19 октября 2012 г.
  23. ^ "PythonImplementations" . Получено 19 июля 2012 г.
  24. ^ "PEP 11 — Удаление поддержки малоиспользуемых платформ". Python.org . Получено 2019-08-08 .
  25. ^ «Irix все еще поддерживается?». 14 февраля 2009 г.
  26. ^ AmigaPython
  27. ^ iSeriesPython
  28. ^ ПитонD
  29. ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 и 3
  30. ^ Stackless Python для PSP
  31. ^ Порт Python для Windows CE
  32. ^ "Питон". ВСИ . Проверено 31 августа 2021 г.
  33. ^ "Жизненные циклы поддержки для корпоративных дистрибутивов Linux". Архивировано из оригинала 2022-08-30 . Получено 2017-10-15 .
  34. ^ "Цикл релизов Ubuntu". Ubuntu . Получено 2021-01-18 .
  35. ^ "С окончанием поддержки Python 2 Ubuntu 20.04 LTS движется вместе с удалением Python 2 - Phoronix". phoronix.com . Получено 01.04.2020 .
  36. ^ "Двоичный пакет "python3" в Ubuntu Focal". Launchpad.net .
  37. ^ "Ubuntu 18.04 продлен до 2028". ServerWatch.com. 2018-11-15 . Получено 2019-09-09 .
  38. ^ ab "python-defaults package: Ubuntu". Canonical Ltd. 2018-06-08 . Получено 2018-06-08 .
  39. ^ ab "python3-defaults package: Ubuntu". Canonical Ltd. 2018-06-08 . Получено 2018-06-08 .
  40. ^ Наука, Школа компьютерных наук Университета Карнеги-Меллона. "Ubuntu 16.04 - Окончание срока службы в 2021 году - Вычислительные мощности SCS - Университет Карнеги-Меллона". computing.cs.cmu.edu . Получено 15.02.2021 .
  41. ^ ab "Выпущен Debian 12 bookworm". debian.org .
  42. ^ ab "Debian -- Новости -- Выпущен Debian 11 "bullseye"". debian.org . Получено 04.01.2022 .
  43. ^ "LTS - Debian Wiki". wiki.debian.org . Получено 2021-02-15 .
  44. ^ "Debian -- Подробности пакета python в buster". packages.debian.org . Получено 13.09.2019 .
  45. ^ "Debian -- Новости -- Выпущен Debian 10 "buster"". debian.org . Получено 09.08.2019 .
  46. ^ "Debian -- Новости -- Долгосрочная поддержка Debian 8 подходит к концу". debian.org . Получено 15.02.2021 .
  47. ^ "DistroWatch.com: Debian". DistroWatch.com. 2017-10-15 . Получено 2017-10-15 .
  48. ^ "Debian -- Подробности пакета python3 в stretch" . Получено 2017-12-19 .
  49. ^ "Python в RHEL 8". Блог разработчиков Red Hat . 2018-11-14. Архивировано из оригинала 2019-05-10 . Получено 2019-05-10 .
  50. ^ "Red Hat Enterprise Linux Life Cycle". Red Hat Customer Portal . Получено 2020-04-01 .
  51. ^ "DistroWatch.com: Red Hat Enterprise Linux". DistroWatch.com. 2017-09-07 . Получено 2017-10-15 .
  52. ^ "DistroWatch.com: CentOS". DistroWatch.com. 2017-09-14 . Получено 2017-10-15 .
  53. ^ "Заметки о выпуске | SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA". suse.com . Получено 2019-08-08 .
  54. ^ ab "DistroWatch.com: openSUSE". DistroWatch.com. 2017-10-14 . Получено 2017-10-15 .
  55. Мартелли, Алекс (2006). Python in a Nutshell (2-е изд.). O'Reilly . С. 5–7. ISBN 978-0-596-10046-9.

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

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