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 Python.
CPython puede definirse como intérprete y compilador , ya que compila el código Python a bytecode antes de interpretarlo. Cuenta con una interfaz de funciones externas para varios lenguajes, incluido C, en la que es necesario escribir explícitamente las vinculaciones en un lenguaje distinto de Python.
Diseño
Una característica particular de CPython es que utiliza un bloqueo global del intérprete (GIL) de tal manera que para cada proceso del intérprete de CPython , solo un hilo puede procesar el código de bytes a la vez. [ 2 ] Esto no significa que no tenga sentido usar multihilo ; el escenario más común de multihilo es cuando los hilos esperan principalmente a que los procesos externos finalicen.
Esto puede ocurrir cuando varios hilos atienden a clientes diferentes. Un hilo puede estar esperando la respuesta de un cliente, otro puede estar esperando a que se ejecute una consulta a la base de datos , mientras que el tercer hilo está procesando código Python.
Sin embargo, el GIL implica que CPython no es adecuado para procesos que implementan algoritmos intensivos en CPU en código Python que potencialmente podrían distribuirse entre varios núcleos.
En aplicaciones reales, las situaciones en las que el GIL (Global Interpreter Lock) representa un cuello de botella significativo son bastante raras. Esto se debe a que Python es un lenguaje inherentemente lento y, por lo general, no se utiliza para operaciones que requieren mucha CPU o que son sensibles al tiempo. Python se usa normalmente en el nivel superior y llama a funciones de bibliotecas para realizar tareas especializadas. Estas bibliotecas generalmente no están escritas en Python, y el código Python en otro hilo puede ejecutarse mientras se realiza una llamada a uno de estos procesos subyacentes. La biblioteca que no es de Python y que se llama para realizar la tarea que requiere mucha CPU no está sujeta al GIL y puede ejecutar simultáneamente muchos hilos en múltiples procesadores sin restricciones.
La ejecución concurrente de código Python solo se puede lograr mediante procesos intérpretes CPython independientes gestionados por un sistema operativo multitarea . Esto complica la comunicación entre procesos Python concurrentes , aunque el módulo multiprocessing lo mitiga en cierta medida; esto significa que las aplicaciones que realmente pueden beneficiarse de la ejecución concurrente de código Python pueden implementarse con una sobrecarga limitada .
La presencia del GIL simplifica la implementación de CPython y facilita la creación de aplicaciones multihilo que no se benefician de la ejecución concurrente de código Python. Sin embargo, sin un GIL, las aplicaciones multiprocesamiento deben garantizar que todo el código común sea seguro para subprocesos.
Aunque se han presentado numerosas propuestas para eliminar el GIL, el consenso general es que, en la mayoría de los casos, las ventajas del GIL superan las desventajas; en los pocos casos en que el GIL representa un cuello de botella, la aplicación debería diseñarse en torno a la estructura de multiprocesamiento. Para facilitar un mayor paralelismo, en octubre de 2023 se lanzó una mejora que permite un GIL independiente por subintérprete en un único proceso de Python, descrito como «hilos con compartición opcional». [ 3 ] [ 4 ]
Después de varios debates, en 2023 se lanzó un proyecto para proponer que el GIL fuera opcional a partir de la versión 3.13 de Python, [ 5 ] que se publicó el 7 de octubre de 2024, en Python 3.13.0. [ 6 ] [ 7 ]
Historia
En 2009, se creó una rama patrocinada por Google llamada Unladen Swallow para incorporar un compilador justo a tiempo en CPython. [ 8 ] [ 9 ] El desarrollo finalizó en 2011 sin que se fusionara con la implementación principal, [ 10 ] aunque parte de su código, como las mejoras al módulo cPickle, sí se incluyó. [ 11 ] [ 8 ]
En 2021, se propuso un "intérprete adaptativo especializado", que mejoró el rendimiento entre un 10 % y un 60 % al especializar las instrucciones de ejecución común que mostraban una aparente estabilidad de tipo en instrucciones más rápidas y específicas de tipo, y que podía desespecializar las instrucciones cuando fuera necesario. [ 12 ] El SAI se incluyó por primera vez en Python 3.11, que, según el conjunto de pruebas de rendimiento "pyperformance", era un 25 % más rápido en promedio que Python 3.10. [ 13 ]
En 2024, un compilador Just-in-Time experimental se integró en la rama principal de desarrollo de CPython. Este JIT inicial se basa en LLVM y busca acelerar las rutas de código críticas . En el momento de la integración, el compilador aún no estaba incluido en las configuraciones de compilación predeterminadas de CPython y ofrecía un rendimiento similar al de SAI; una de las condiciones para su adopción completa era un aumento de rendimiento de al menos el 5 %. [ 14 ] Permanece deshabilitado por defecto, aunque los usuarios pueden habilitarlo para experimentar y ver cómo Python podría eventualmente competir con otros lenguajes con JIT. [ 15 ]
Distribución
Las plataformas de nivel 1 oficialmente compatibles son Linux para Intel de 64 bits usando una cadena de herramientas GCC, macOS para Intel y ARM de 64 bits, y Microsoft Windows para Intel de 32 y 64 bits. Existe soporte oficial de nivel 2 para Linux para ARM de 64 bits, wasm32 ( Web Assembly ) con soporte de tiempo de ejecución WASI, y Linux para Intel de 64 bits usando una cadena de herramientas clang. Los sistemas de nivel 3 oficialmente compatibles incluyen Windows ARM de 64 bits, iOS de 64 bits, Raspberry Pi OS (Linux para armv7 con coma flotante dura), Linux para PowerPC de 64 bits en modo little-endian y Linux para s390x .
Más plataformas tienen implementaciones funcionales, entre ellas: [ 16 ]
- Similar a Unix
- Especial e integrado
- Androide
- Apple iOS (compatible con las versiones obsoletas de Python 3.6 y 2.7)
- BlackBerry 10
- GP2X
- iPodLinux
- Nintendo DS
- GameCube
- Sistema operativo Symbian Serie 60
- Tableta de Internet Nokia 770
- Nokia N800
- Nokia N810
- Nokia N900
- Openmoko
- Sistema operativo Palm
- PlayStation 2
- PlayStation 3 (FreeBSD)
- Psión
- QNX
- Zaurus afilado
- Xbox / XBMC
- VxWorks
- Otro
- AROS
- Sistema operativo/390
- Windows 8 y versiones posteriores
- z/OS
PEP 11 [ 17 ] enumera las plataformas que no son compatibles con CPython por parte de la Python Software Foundation . Estas plataformas aún pueden ser compatibles mediante puertos externos. Estos puertos incluyen:
- AtheOS (sin soporte desde la versión 2.6)
- BeOS (sin soporte desde la versión 2.6)
- DOS (sin soporte desde la versión 2.0)
- IRIX 4 (sin soporte desde la versión 2.3)
- IRIX 5 y posteriores (sin soporte desde 3.2, 3.7) [ 18 ]
- Mac OS 9 (no compatible desde la versión 2.4)
- MINIX (sin soporte desde la versión 2.3)
- OpenVMS (sin soporte desde la versión 3.3)
- OS/2 (sin soporte desde la versión 3.3)
- Sistema operativo RISC (sin soporte desde la versión 3.0)
- Windows: En general, las versiones de Windows siguen recibiendo soporte completo de nivel 1 mientras estén cubiertas por la política de ciclo de vida de soporte extendido de Microsoft. Una vez que expire el período de soporte extendido de Microsoft para una versión anterior de Windows, el proyecto dejará de ofrecer soporte para esa versión en la siguiente versión principal (XY0) de Python. Sin embargo, las versiones de corrección de errores (0.0.Z) de cada rama de lanzamiento mantendrán el soporte para todas las versiones de Windows que se admitieron en la versión inicial XY0. Las ediciones de Windows destinadas a sistemas integrados e IoT se consideran fuera del alcance de la política de soporte oficial de Python.
- Windows 8 (sin soporte oficial en ninguna versión principal de Python desde el 10 de enero de 2023)
- Windows 7 (sin soporte oficial en ninguna versión principal de Python desde el 14 de enero de 2020)
- Windows Vista (sin soporte desde la versión 3.9)
- Windows XP (sin soporte desde la versión 3.5)
- Windows 2000 (sin soporte desde la versión 3.3)
- Windows 3.x (no compatible desde la versión 2.0)
- Windows 9x (no compatible desde la versión 2.6)
- Windows NT4 (no compatible desde la versión 2.6)
Los puertos externos no integrados en la versión oficial de CPython de la Python Software Foundation, con enlaces a su sitio de desarrollo principal, a menudo incluyen módulos adicionales para funcionalidades específicas de la plataforma, como la API de gráficos y sonido para PSP y SMS y la API de cámara para S60. Estos puertos incluyen:
- Amiga : AmigaPython [ 19 ]
- IBM i : iSeriesPython [ 20 ]
- DOS usando DJGPP : PythonD [ 21 ]
- MorphOS : Python 2 y 3 [ 22 ]
- PlayStation Portable : Python sin pila para PSP [ 23 ]
- Sistema operativo Symbian : Python para S60
- Windows CE / Pocket PC : Puerto de Python para Windows CE [ 24 ]
- OpenVMS : VSI mantiene los puertos de Python 3.x [ 25 ].
Enterprise Linux
Estas versiones de Python se distribuyen con las distribuciones de Linux empresariales compatibles actualmente. [ 26 ] El estado de soporte de Python en la tabla se refiere al soporte del equipo central de Python, y no al del mantenedor de la distribución.
Alternativas
CPython es una de las varias implementaciones de Python de "calidad de producción", entre las que se incluyen: Jython , escrito en Java para la máquina virtual de Java (JVM); PyPy , escrito en RPython y traducido a C; e IronPython , escrito en C# para la infraestructura de lenguaje común . También existen varias implementaciones experimentales. [ 48 ]
Referencias
- ↑ "Versión 3.14.6" . 10 de junio de 2026. Consultado el 11 de junio de 2026 .
- ↑ "Inicialización, finalización e hilos" . Documentación de Python v3.8.3 . Consultado el 4 de junio de 2020 .
- ↑ Jake Edge (15 de agosto de 2023). "Un GIL por intérprete" . LWN . Consultado el 13 de enero de 2024 .
- ↑ "PEP 684 – Un GIL por intérprete | peps.python.org" . Consultado el 13 de enero de 2024 .
- ↑ "PEP 703 – Hacer que el bloqueo global del intérprete sea opcional en CPython | peps.python.org" . peps.python.org . Consultado el 17 de septiembre de 2023 .
- ↑ "PEP 719 – Calendario de lanzamiento de Python 3.13 | peps.python.org" . peps.python.org . Consultado el 17 de septiembre de 2023 .
- ↑ "Python Release Python 3.13.0" . Python.org . Consultado el 28 de marzo de 2025 .
- 1 2 Winter, Collin; Yasskin, Jeffrey; Kleckner, Reid (2010-03-17). "PEP 3146 - Integración de Unladen Swallow en CPython" . Python.org.
- ↑ "Unladen Swallow 2009Q1" . unladen-swallow, una implementación más rápida de Python . Consultado el 19 de octubre de 2012 .
- ↑ Kleckner, Reid (26 de marzo de 2011). "Retrospectiva de Unladen Swallow" . QINSB no es un blog de software (qinsb.blogspot.com) .
- ↑ "Problema 9410: Agregar optimizaciones de Unladen Swallow al pickle de Python 3. - Rastreador de Python" . bugs.python.org . Consultado el 8 de agosto de 2019 .
- ↑ Mark Shannon (13 de abril de 2021). "PEP 659 – Especialización del intérprete adaptativo" .
- ↑ Pablo Galindo Salgado. "Novedades en Python 3.11 § PEP 659: Especialización del intérprete adaptativo" .
- ↑ Brandt Bucher; Savannah Ostrowski (11 de abril de 2024). "PEP 744 – Compilación JIT" . Recuperado el 5 de febrero de 2025 .
- ↑ "Novedades de Python 3.13.3 y la próxima versión 3.14: una guía para principiantes" . Consultado el 25 de abril de 2025 .
- ↑ "Implementaciones en Python" . Consultado el 19 de julio de 2012 .
- ↑ "PEP 11 -- Eliminación del soporte para plataformas poco utilizadas" . Python.org . Consultado el 8 de agosto de 2019 .
- ↑ "¿Irix todavía recibe apoyo?" . 14 de febrero de 2009.
- ↑ "Página principal de AmigaPython" . www.monkeyhouse.eclipse.co.uk . Consultado el 20 de febrero de 2025 .
- ↑ "Yo | Serie | Python" . Yo | Serie | Python . Consultado el 20 de febrero de 2025 .
- ↑ "PythonD Python de 32 bits para DOS y Windows" . www.caddit.net . Consultado el 20 de febrero de 2025 .
- ↑ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 y 3
- ↑ "Archivo de código de Google: almacenamiento a largo plazo para el alojamiento de proyectos de código de Google" . code.google.com . Consultado el 20 de febrero de 2025 .
- ↑ "Python Windows CE port" . SourceForge . 22 de enero de 2018. Consultado el 20 de febrero de 2025 .
- ↑ «Pitón» . VSI . Consultado el 31 de agosto de 2021 .
- ↑ "Soporte para ciclos de vida de distribuciones de Linux empresariales" . Archivado del original el 30 de agosto de 2022. Consultado el 15 de octubre de 2017 .
- ↑ "Ciclo de lanzamiento de Ubuntu" . Ubuntu . Consultado el 18 de enero de 2021 .
- ↑ "Tras el fin del soporte para Python 2, Ubuntu 20.04 LTS avanza con la eliminación de Python 2 - Phoronix" . phoronix.com . Consultado el 1 de abril de 2020 .
- ↑ "Paquete binario "python3" en Ubuntu Focal" . Launchpad.net .
- ↑ "Ubuntu 18.04 extendido hasta 2028" . ServerWatch.com. 15 de noviembre de 2018. Consultado el 9 de septiembre de 2019 .
- 1 2 "python-defaults package: Ubuntu" . Canonical Ltd. 2018-06-08 . Consultado el 2018-06-08 .
- 1 2 "paquete python3-defaults: Ubuntu" . Canonical Ltd. 2018-06-08 . Recuperado el 2018-06-08 .
- ↑ Ciencias, Escuela de Informática de la Universidad Carnegie Mellon. "Ubuntu 16.04 - Fin de vida útil en 2021 - Instalaciones informáticas de SCS - Universidad Carnegie Mellon" . computing.cs.cmu.edu . Consultado el 15 de febrero de 2021 .
- 1 2 "Se ha lanzado Debian 12 bookworm" . debian.org .
- 1 2 "Debian -- Noticias -- Se lanza Debian 11 "bullseye"" . debian.org . Archivado del original el 14 de agosto de 2021. Consultado el 4 de enero de 2022 .
- ↑ "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 -- Se lanza Debian 10 "buster"" . debian.org . Archivado del original el 22/10/2021 . Consultado el 09/08/2019 .
- ↑ "Debian -- Noticias -- El soporte a largo plazo de Debian 8 llega al final de su ciclo de vida" . debian.org . Consultado el 15 de febrero de 2021 .
- ↑ "DistroWatch.com: Debian" . DistroWatch.com. 15 de octubre de 2017. 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 . 14 de noviembre de 2018. Archivado del original el 10 de mayo de 2019. Consultado el 10 de mayo de 2019 .
- ↑ "Ciclo de vida de Red Hat Enterprise Linux" . Portal de clientes de Red Hat . Consultado el 1 de abril de 2020 .
- ↑ "DistroWatch.com: Red Hat Enterprise Linux" . DistroWatch.com. 7 de septiembre de 2017. Consultado el 15 de octubre de 2017 .
- ↑ "DistroWatch.com: CentOS" . DistroWatch.com. 14 de septiembre de 2017. Consultado el 15 de octubre de 2017 .
- ↑ "Notas de la versión | SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA" . suse.com . Consultado el 8 de agosto de 2019 .
- 1 2 "DistroWatch.com: openSUSE" . DistroWatch.com. 14 de octubre de 2017. 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.
Lecturas adicionales
- Shaw, Anthony (2021). CPython Internals: Your Guide to the Python 3 Interpreter . Real Python. ISBN 9781775093343.
Enlaces externos
- CPython en GitHub
- Compiladores libres y de código abierto
- Intérpretes de código abierto y libre
- Software libre programado en C
- Software libre programado en Python
- Implementaciones de Python (lenguaje de programación)
- Software que utiliza la licencia de la Python Software Foundation.
- Máquinas virtuales basadas en pila
- Software libre multiplataforma