CPython

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
CPython
Типреалізація мови програмуванняd
еталонне втіленняd
інтерпретатор і вільне та відкрите програмне забезпечення
АвторГвідо ван Россум
РозробникPython Software Foundation
Стабільний випуск3.8.1
Платформакросплатформова програма
Операційна системаБагатоплатформова
Мова програмуванняC, Python
ЛіцензіяSoftware Foundation License
РепозиторійCPython
Вебсайтpython.org

CPython — найбільш поширена, еталонна реалізація інтерпретатора мови програмування Python.

CPython є інтерпретатором байт-коду, написаний на C. Розробка CPython ведеться групою розробників під керівництвом творця Python Гвідо ван Россума. CPython є програмним забезпеченням з відкритим вихідним кодом.

Крім CPython, існують інші реалізації Python: Jython, IronPython, PyPy, Stackless Python.

Дизайн

[ред. | ред. код]

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

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

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

У реальних програмах ситуації, коли GIL є значним вузьким місцем, є досить рідкісним. Це пояснюється тим, що Python властива повільна мова, і зазвичай не використовується для процесорів, які вимагають швидкого процесора або залежать від часу. Python, як правило, використовується на верхньому рівні і викликає функції в бібліотеках для виконання спеціалізованих завдань. Ці бібліотеки, як правило, не записуються в Python, а код Python в іншому потоці може виконуватися під час виклику до одного з цих базових процесів. Бібліотека, яка не є Python, покликана виконувати завдання, що вимагає процесора, не підлягає GIL і може одночасно виконувати безліч потоків на декількох процесорах без обмежень.

Паралельність коду Python може бути досягнута лише за допомогою окремих процесів інтерпретатора CPython, якими керує багатозадачна операційна система. Це ускладнює зв'язок між паралельними процесами Python, хоча модуль багатопроцесорної обробки дещо пом'якшує це; це означає, що програми, які дійсно можуть отримати користь від одночасного виконання Python-коду, можуть бути реалізовані з обмеженою сумою витрат.

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

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

Платформи, що підтримуються

[ред. | ред. код]

Платформи, що більше не підтримуються

[ред. | ред. код]

В PEP 11 [2] перераховані платформи, які більше не підтримуються Python Software Foundation. З усім тим ці платформи можуть мати підтримку від інших дистриб'юторів. Список платформ, що більше не підтримуються:

  • DOS (не підтримується, починаючи з 2.0)
  • IRIX 4 (не підтримується, починаючи з 2.3)
  • Mac OS 9 (не підтримується, починаючи з 2.4)
  • MINIX (не підтримується, починаючи з 2.3)

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

[ред. | ред. код]

CPython є однією з декількох «виробничих особливостей» реалізації Python, включаючи: Jython, написаний на Java для Java віртуальної машини (JVM), PyPy, написаний на RPython та перекладений на C, та IronPython, написаний на C #. Також є кілька експериментальних реалізацій.[3]

Примітки

[ред. | ред. код]
  1. Ініціалізація, завершення та теми. Архів оригіналу за 22 жовтня 2020. Процитовано 8 серпня 2015. {{cite web}}: Текст «.7.6 документація» проігноровано (довідка)
  2. [1] [Архівовано 9 червня 2009 у Wayback Machine.]
  3. Martelli, Alex (2006). Python in a Nutshell (вид. 2nd). O'Reilly. с. 5–7. ISBN 978-0-596-10046-9.

Посилання

[ред. | ред. код]