CPython
Тип | реалізація мови програмуванняd еталонне втіленняd інтерпретатор і вільне та відкрите програмне забезпечення |
---|---|
Автор | Гвідо ван Россум |
Розробник | Python Software Foundation |
Стабільний випуск | 3.8.1 |
Платформа | кросплатформова програма |
Операційна система | Багатоплатформова |
Мова програмування | C, Python |
Ліцензія | Software Foundation License |
Репозиторій | https://github.com/python/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 перераховані платформи, які більше не підтримуються 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 #. Також є кілька експериментальних реалізацій.[2]
Примітки
- ↑ Ініціалізація, завершення та теми. Процитовано 8 серпня 2015.
{{cite web}}
: Текст «.7.6 документація» проігноровано (довідка) - ↑ Martelli, Alex (2006). Python in a Nutshell (вид. 2nd). O'Reilly. с. 5–7. ISBN 978-0-596-10046-9.