CPython es la implementación de referencia del lenguaje de programación Python . Escrito en C y Python, CPython es la implementación predeterminada y más utilizada del lenguaje.
Autor (es) original (es) | Guido van Rossum |
---|---|
Desarrollador (es) | Desarrolladores centrales de Python y la comunidad de Python, con el apoyo de Python Software Foundation |
Versión inicial | 26 de enero de 1994 |
Lanzamiento estable | 3.9.2 / 19 de febrero de 2021 [1] |
Repositorio | https://github.com/python/cpython |
Escrito en | C , Python |
Plataforma | 42 plataformas; ver § Distribución |
Disponible en | inglés |
Tipo | Intérprete del lenguaje de programación Python |
Licencia | Licencia de Python Software Foundation |
Sitio web | www |
CPython se puede definir como un intérprete y un compilador, ya que compila el código Python en un código de bytes antes de interpretarlo. Tiene una interfaz de función extranjera con varios lenguajes, incluido C, en el que se deben escribir enlaces explícitamente en un lenguaje que no sea Python.
Diseño
Una característica particular de CPython es que hace uso de un bloqueo de intérprete global (GIL) en cada proceso de intérprete de CPython , lo que significa que dentro de un solo proceso, solo un subproceso puede estar procesando el código de bytes de Python en cualquier momento. [2] Esto no significa que no tenga sentido el multiproceso; el escenario de subprocesos múltiples más común es donde los subprocesos esperan principalmente que se completen los procesos externos.
Por ejemplo, imagine cuando tres subprocesos atienden a clientes separados. Un hilo puede estar esperando a que un cliente responda y otro puede estar esperando a que se ejecute una consulta de base de datos, mientras que el tercer hilo está procesando realmente el código Python.
Sin embargo, el GIL significa que CPython no es adecuado para procesos que implementan algoritmos intensivos en CPU en código Python que potencialmente podrían distribuirse en múltiples núcleos.
En aplicaciones del mundo real, las situaciones en las que el GIL es un cuello de botella significativo son bastante raras. Esto se debe a que Python es un lenguaje intrínsecamente lento y, por lo general, no se usa para operaciones que requieren un uso intensivo de la CPU o que dependen del tiempo. Python generalmente se usa en el nivel superior y llama a funciones en bibliotecas para realizar tareas especializadas. Estas bibliotecas generalmente no están escritas en Python, y el código de Python en otro hilo se puede ejecutar mientras se realiza una llamada a uno de estos procesos subyacentes. La biblioteca que no es de Python a la que se llama para realizar la tarea de uso intensivo de la CPU no está sujeta a la GIL y puede ejecutar simultáneamente muchos subprocesos en múltiples procesadores sin restricción.
La simultaneidad del código Python solo se puede lograr con procesos de intérprete CPython separados administrados por un sistema operativo multitarea . Esto complica la comunicación entre procesos concurrentes de Python, aunque el módulo de multiprocesamiento lo mitiga un poco; significa que las aplicaciones que realmente pueden beneficiarse de la ejecución concurrente de código Python pueden implementarse con una cantidad limitada de gastos generales.
La presencia de GIL simplifica la implementación de CPython y facilita la implementación de aplicaciones multiproceso que no se benefician de la ejecución concurrente de código Python. Sin embargo, sin un GIL, las aplicaciones de multiprocesamiento deben asegurarse de que todo el código común sea seguro para subprocesos.
Aunque se han hecho muchas propuestas para eliminar el GIL, el consenso general ha sido que, en la mayoría de los casos, las ventajas del GIL superan a las desventajas; en los pocos casos en que el GIL es un cuello de botella, la aplicación debe construirse alrededor de la estructura de multiprocesamiento.
Historia
Golondrina sin carga
Unladen Swallow era una rama de optimización de CPython, destinada a ser totalmente compatible y significativamente más rápida. Su objetivo era lograr sus objetivos complementando la máquina virtual personalizada de CPython con un compilador justo a tiempo creado con LLVM .
El proyecto había establecido el objetivo de mejorar la velocidad en un factor de cinco con respecto a CPython; [3] este objetivo no se cumplió. [4]
El proyecto fue patrocinado por Google y los propietarios del proyecto, Thomas Wouters, Jeffrey Yasskin y Collin Winter, son empleados de Google a tiempo completo; sin embargo, la mayoría de los colaboradores del proyecto no eran empleados de Google. [5] Unladen Swallow estaba alojado en Google Code. [6]
Como muchas cosas con respecto al lenguaje Python, el nombre Unladen Swallow es una referencia de Monty Python , específicamente al chiste sobre la velocidad del aire de las golondrinas sin carga en Monty Python y el Santo Grial .
Aunque no cumplió con todos los objetivos publicados, Unladen Swallow produjo algún código que se agregó a la implementación principal de Python, como mejoras en el módulo cPickle. [7]
En julio de 2010, algunos observadores especularon sobre si el proyecto estaba muerto o agonizando ya que el hito del cuarto trimestre de 2009 aún no se había publicado. [8] El tráfico en la lista de correo de Unladen había disminuido de 500 mensajes en enero de 2010 a menos de 10 en septiembre de 2010. [9] También se informó que Unladen perdió la financiación de Google. [10] En noviembre de 2010, uno de los principales desarrolladores anunció que "Jeffrey y yo hemos sido llevados a otros proyectos de mayor importancia para Google". [11]
La rama de desarrollo del cuarto trimestre de 2009 se creó el 26 de enero de 2010, [12] pero no se hizo publicidad en el sitio web. Además, con respecto a los planes a largo plazo, y dado que el proyecto perdió la versión de Python 2.7, se aceptó una propuesta de mejora de Python (PEP) [4] , que proponía una fusión de Unladen Swallow en una rama especial de py3k-jit del repositorio oficial de Python. . En julio de 2010, este trabajo estaba en curso. [13] Esta fusión habría llevado algún tiempo, ya que Unladen Swallow se basó originalmente en Python 2.6 [14] con el que Python 3 rompió la compatibilidad (ver Python 3000 para más detalles). Sin embargo, la PEP fue posteriormente retirada.
A principios de 2011, quedó claro que el proyecto se detuvo. [15]
Historial de liberación de golondrina sin carga
Distribución
Las plataformas compatibles incluyen: [19]
- Tipo Unix
- AIX
- BSD
- Darwin
- FreeBSD
- HP-UX
- Ilumina
- Linux
- Mac OS
- NetBSD
- OpenBSD
- Plan 9
- Solaris
- Tru64
- Especial e incrustado
- IOS de Apple
- Androide
- BlackBerry 10
- GP2X
- iPodLinux
- Nintendo DS
- Nintendo Gamecube
- Symbian OS Series60
- Tableta de Internet Nokia 770
- Nokia N800
- Nokia N810
- Nokia N900
- Openmoko
- Palm OS
- Playstation 2
- PlayStation 3 (FreeBSD)
- Psion
- QNX
- Zaurus afilado
- Xbox / XBMC
- VxWorks
- Otro
- AROS
- OS / 390
- Windows Vista y posterior
- z / OS [ cita requerida ]
PEP 11 [20] enumera las plataformas que no son compatibles con CPython por la Python Software Foundation . Estas plataformas aún pueden ser compatibles con puertos externos. Estos puertos incluyen:
- AtheOS (no compatible desde 2.6)
- BeOS (no compatible desde 2.6)
- DOS (no compatible desde 2.0)
- IRIX 4 (no compatible desde 2.3)
- IRIX 5 y posterior (no compatible desde 3.2, 3.7) [21]
- Mac OS 9 (no compatible desde 2.4)
- MINIX (no compatible desde 2.3)
- VMS (no compatible desde 3.3)
- OS / 2 (no compatible desde 3.3)
- RISC OS (no compatible desde 3.0)
- Windows XP (no compatible desde 3.5)
- Windows 2000 (no compatible desde 3.3)
- Windows 3.x (no compatible desde 2.0)
- Windows 9x (no compatible desde 2.6)
- Windows NT4 (no compatible desde 2.6)
Los puertos externos no integrados a la versión oficial de Python Software Foundation de CPython, con enlaces a su sitio de desarrollo principal, a menudo incluyen módulos adicionales para funcionalidades específicas de la plataforma, como API de gráficos y sonido para PSP y SMS y API de cámara para S60. Estos puertos incluyen:
- Amiga : AmigaPython [22]
- AS / 400 : iSeriesPython [23]
- DOS usando DJGPP : PythonD [24]
- MorphOS : Python 2 y 3 [25]
- PlayStation Portable : Python sin pila para PSP [26]
- Sistema operativo Symbian : Python para S60
- Windows CE / Pocket PC : puerto Python Windows CE [27]
Linux empresarial
Estas versiones de Python se distribuyen con las distribuciones de Linux empresariales compatibles actualmente. [28] El estado de soporte de Python en la tabla se refiere al soporte del equipo central de Python, y no del mantenedor de la distribución.
Versión de distribución | Distribución al final de su vida útil | Versión de Python | |
---|---|---|---|
Ubuntu 20.04 LTS (Focal Fossa) | 2030-04 [29] [ necesita actualización ] | [30] | 3.8 [31] |
Ubuntu 18.04 LTS (Castor biónico) | 04/2028 [32] | 2,7 [33] | 3.6 [34] |
Ubuntu 16.04 LTS (Xenial Xerus) | 2021-04-30 [35] [ necesita actualización ] | 2,7 [33] | 3,5 [34] |
Debian 10 | 2024-06 [36] | 2,7 [37] | 3,7 [38] |
Debian 9 | 30 de junio de 2022 [39] | 2.7 [40] | 3,5 [41] |
Red Hat Enterprise Linux 8 | 2029 | 2,7 [42] | 3.6 |
Red Hat Enterprise Linux 7 | 30/11/2024 [43] | 2,7 [44] | |
CentOS 8 | 2029-05-31 | 2,7 | 3.6 |
CentOS 7 | 2024-06-30 | 2,7 [45] | |
SUSE Linux Enterprise Server 15 | 2031-07-31 | 2,7 [46] | 3.6 |
SUSE Linux Enterprise Server 12 | 2027-10-31 | 2,7 [47] | |
SUSE Linux Enterprise Server 11 | 2022-03-31 | 2,7 [48] | |
Versión antigua Versión anterior, aún mantenida Ultima versión |
Alternativas
CPython es una de varias implementaciones de Python de "calidad de producción" que incluyen: Jython , escrito en Java para la máquina virtual Java (JVM), PyPy , escrito en RPython y traducido a C, e IronPython , que está escrito en C # para Common Language Infraestructura . También hay varias implementaciones experimentales . [49]
Referencias
- ^ "Python 3.9.2" . Python.org. 2021-02-19 . Consultado el 27 de febrero de 2021 .
- ^ "Inicialización, finalización e hilos" . Documentación de Python v3.8.3 . Consultado el 4 de junio de 2020 .
- ^ Paul, Ryan (26 de marzo de 2009). "Informe de Ars Technica sobre objetivos de golondrina sin carga" . Arstechnica.com . Consultado el 19 de agosto de 2011 .
- ^ a b Invierno, Collin; Yasskin, Jeffrey; Kleckner, Reid (17 de marzo de 2010). "PEP 3146 - fusión de golondrina sin carga en CPython" . Python.org.
- ^ "Personas que trabajan en Unladen Swallow" . Archivado desde el original el 29 de octubre de 2015 . Consultado el 8 de agosto de 2019 .
- ^ "Página del proyecto Unladen Swallow" . Consultado el 19 de agosto de 2011 .
- ^ "Problema 9410: agregar optimizaciones de Unladen Swallow a la salmuera de Python 3. - Rastreador de Python" . bugs.python.org . Consultado el 8 de agosto de 2019 .
- ^ "Mensaje sobre comp.lang.python" . Consultado el 19 de agosto de 2011 .
- ^ "Unladen Swallow | Grupos de Google" . Consultado el 19 de agosto de 2011 .
- ^ "publicación de reddit por un confirmador de Unladen" . Reddit.com. 2010-06-24 . Consultado el 19 de agosto de 2011 .
- ^ Winter, Collin (8 de noviembre de 2010). "Estado actual de Unladen-Swallow" .
- ^ "Creación de la rama de lanzamiento del cuarto trimestre de 2009" . 2010-01-26 . Consultado el 19 de agosto de 2011 .
- ^ "Los desarrolladores se centran en fusionar en py3k-jit" . 2010-07-13 . Consultado el 19 de agosto de 2011 .
- ^ "Línea de base de golondrina sin carga" . Python.org . Consultado el 19 de agosto de 2011 .
- ^ Kleckner, Reid (26 de marzo de 2011). "Retrospectiva de golondrina sin carga" . QINSB no es un blog de software (qinsb.blogspot.com).
- ^ "Golondrina sin carga 2009Q1" . unladen-swallow, una implementación más rápida de Python . Consultado el 19 de octubre de 2012 .
- ^ "Golondrina sin carga 2009Q2" . unladen-swallow, una implementación más rápida de Python . Consultado el 19 de octubre de 2012 .
- ^ "Golondrina sin carga 2009Q3" . unladen-swallow, una implementación más rápida de Python . Consultado el 19 de octubre de 2012 .
- ^ "PythonImplementations" . Consultado el 19 de julio de 2012 .
- ^ "PEP 11 - Eliminando soporte para plataformas poco usadas" . Python.org . Consultado el 8 de agosto de 2019 .
- ^ "¿Irix todavía es compatible?" .
- ^ AmigaPython
- ^ iSeriesPython
- ^ PythonD
- ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 y 3
- ^ Python sin pila para PSP
- ^ Puerto de Python Windows CE
- ^ https://linuxlifecycle.com
- ^ "Ciclo de lanzamiento de Ubuntu" . Ubuntu . Consultado el 18 de enero de 2021 .
- ^ "Con Python 2 EOL'ed, Ubuntu 20.04 LTS avanza junto con su eliminación de Python 2 - Phoronix" . www.phoronix.com . Consultado el 1 de abril de 2020 .
- ^ "Paquete binario" python3 "en ubuntu focal" . Launchpad.net .
- ^ "Ubuntu 18.04 extendido a 2028" . ServerWatch.com. 2018-11-15 . Consultado el 9 de septiembre de 2019 .
- ^ a b "paquete python-defaults: Ubuntu" . Canonical Ltd. 2018-06-08 . Consultado el 8 de junio de 2018 .
- ^ a b "paquete python3-defaults: Ubuntu" . Canonical Ltd. 2018-06-08 . Consultado el 8 de junio de 2018 .
- ^ Ciencias, Escuela de Computación de la Universidad Carnegie Mellon. "Ubuntu 16.04 - Fin de la vida útil en 2021 - Instalaciones informáticas de SCS - Universidad Carnegie Mellon" . computing.cs.cmu.edu . Consultado el 15 de febrero de 2021 .
- ^ "LTS - Debian Wiki" . wiki.debian.org . Consultado el 15 de febrero de 2021 .
- ^ "Debian - Detalles del paquete python en buster" . packages.debian.org . Consultado el 13 de septiembre de 2019 .
- ^ "Debian - Noticias - Debian 10" buster "publicado" . www.debian.org . Consultado el 9 de agosto de 2019 .
- ^ "Debian - Noticias - El soporte a largo plazo de Debian 8 llega al final de su vida útil" . www.debian.org . Consultado el 15 de febrero de 2021 .
- ^ "DistroWatch.com: Debian" . DistroWatch.com. 2017-10-15 . Consultado el 15 de octubre de 2017 .
- ^ "Debian - Detalles del paquete python3 en stretch" . Consultado el 19 de diciembre de 2017 .
- ^ "Python en RHEL 8" . Blog de desarrolladores de Red Hat . 2018-11-14 . Consultado el 10 de mayo de 2019 .
- ^ "Ciclo de vida de Red Hat Enterprise Linux" . Portal del cliente de Red Hat . Consultado el 1 de abril de 2020 .
- ^ "DistroWatch.com: Red Hat Enterprise Linux" . DistroWatch.com. 2017-09-07 . Consultado el 15 de octubre de 2017 .
- ^ "DistroWatch.com: CentOS" . DistroWatch.com. 2017-09-14 . Consultado el 15 de octubre de 2017 .
- ^ "Notas de la versión | SUSE Linux Enterprise Desktop / SUSE Linux Enterprise Workstation Extension 15 GA" . www.suse.com . Consultado el 8 de agosto de 2019 .
- ^ "DistroWatch.com: openSUSE" . DistroWatch.com. 2017-10-14 . Consultado el 15 de octubre de 2017 .
- ^ "DistroWatch.com: openSUSE" . DistroWatch.com. 2017-10-14 . Consultado el 15 de octubre de 2017 .
- ^ Martelli, Alex (2006). Python en pocas palabras (2ª ed.). O'Reilly . págs. 5-7. ISBN 978-0-596-10046-9.
enlaces externos
- CPython en GitHub