CPython

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
CPython
Python logo and wordmark.svg
Fibonnacci-Python.png
Тип реалізація мови програмуванняd
відкрите програмне забезпечення
Еталонна реалізаціяd і інтерпретатор
Автор(и) Гвідо ван Россум
Розробник Python Software Foundation
Стабільний випуск 3.8.1
Версії 3.8.1 (18 грудня 2019)[1]
Репозиторій https://github.com/python/cpython
Операційна система Багатоплатформова
Написано на C, Python
Ліцензія Software Foundation License
Веб-сайт python.org

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

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

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

Дизайн[ред. | ред. код]

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

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

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

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

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

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

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

Платформи, що підтримуються[ред. | ред. код]

Unix-подібні

Десктопні ОС

Спеціальні та вбудовані

Мейнфрейми та інші

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

В PEP 11 перераховані платформи, які більше не підтримуються 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. https://github.com/python/cpython/releases/tag/v3.8.1
  2. [https: //docs.python.org/2/c-api/init.html Ініціалізація, завершення та теми]. Процитовано 2015-08-08.  Текст « .7.6 документація » проігноровано (довідка)
  3. Martelli, Alex (2006). Python in a Nutshell (вид. 2nd). O'Reilly. с. 5–7. ISBN 978-0-596-10046-9.