stringtranslate.com

CPython

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 se puede definir como un intérprete y un compilador , ya que compila el código Python en bytecode antes de interpretarlo. Tiene una interfaz de funciones externas con varios lenguajes, incluido C, en la que se deben escribir explícitamente enlaces en un lenguaje distinto de 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 hilo puede estar procesando código de bytes de Python en cualquier momento. [2] Esto no significa que no tenga sentido el multihilo ; el escenario de multihilo más común es donde los hilos están principalmente esperando que se completen los procesos externos.

Esto puede suceder cuando varios subprocesos atienden a clientes diferentes. Un subproceso puede estar esperando que un cliente responda y otro puede estar esperando que se ejecute una consulta a la base de datos , mientras que el tercer subproceso está procesando código Python.

Sin embargo, GIL significa que CPython no es adecuado para procesos que implementan algoritmos de uso intensivo de CPU en código Python que podrían distribuirse potencialmente entre 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 inherentemente lento y, por lo general, no se utiliza para operaciones que requieren un uso intensivo de la CPU o que requieren un tiempo limitado. Python se utiliza normalmente en el nivel superior y llama a funciones en bibliotecas para realizar tareas especializadas. Estas bibliotecas, por lo general, no están escritas en Python, y el código 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 que requiere un uso intensivo de la CPU no está sujeta al GIL y puede ejecutar simultáneamente muchos hilos en varios procesadores sin restricciones.

La concurrencia del código Python solo se puede lograr con procesos de interpretación CPython separados administrados por un sistema operativo multitarea . Esto complica la comunicación entre procesos Python concurrentes , 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 se pueden implementar con una sobrecarga limitada .

La presencia de la GIL simplifica la implementación de CPython y facilita la implementación de aplicaciones multiproceso que no se benefician de la ejecución simultánea de código Python. Sin embargo, sin una GIL, las aplicaciones 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 las desventajas; en los pocos casos en los que el GIL es un cuello de botella, la aplicación debe construirse en torno a la estructura de multiprocesamiento. Para ayudar a permitir un mayor paralelismo, se lanzó una mejora en octubre de 2023 para permitir un GIL separado por subintérprete en un solo proceso de Python y se han descrito como "hilos con uso compartido opcional". [3] [4]

Después de varios debates, en 2023 se lanzó un proyecto para proponer que el GIL sea opcional a partir de la versión 3.13 de Python, [5] cuyo lanzamiento está previsto para octubre de 2024. [6]

Historia

Golondrina sin carga

Unladen Swallow era una rama de optimización de CPython, pensada para 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 en tiempo real creado con LLVM .

El proyecto había establecido como objetivo mejorar la velocidad en un factor de cinco con respecto a CPython; [7] este objetivo no se cumplió. [8]

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 contribuyentes al proyecto no eran empleados de Google. [9] Unladen Swallow fue alojado en Google Code . [10]

Al igual que muchas cosas relacionadas con el lenguaje Python, el nombre Unladen Swallow es una referencia a 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 alcanzó todos los objetivos publicados, Unladen Swallow produjo algo de código que se agregó a la implementación principal de Python, como mejoras en el módulo cPickle. [11]

En julio de 2010, algunos observadores especularon sobre si el proyecto estaba muerto o moribundo, ya que el hito del cuarto trimestre de 2009 aún no se había publicado. [12] 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. [13] También se ha informado de que Unladen perdió la financiación de Google. [14] En noviembre de 2010, uno de los principales desarrolladores anunció que "Jeffrey y yo hemos sido arrastrados a otros proyectos de mayor importancia para Google". [15]

La rama de desarrollo del cuarto trimestre de 2009 se creó el 26 de enero de 2010, [16] pero no se hizo publicidad en el sitio web. Además, en relación con los planes a largo plazo, y como el proyecto no logró el lanzamiento de Python 2.7, se aceptó una propuesta de mejora de Python (PEP) [8] , que proponía una fusión de Unladen Swallow en una rama especial py3k-jit del repositorio oficial de Python . A julio de 2010, este trabajo estaba en curso. [17] Esta fusión habría llevado algún tiempo, ya que Unladen Swallow se basó originalmente en Python 2.6 [18] con el que Python 3 rompió la compatibilidad (consulte Python 3000 para obtener más detalles). Sin embargo, la PEP se retiró posteriormente.

A principios de 2011, quedó claro que el proyecto estaba detenido. [19]

Historial de lanzamiento de Unladen Swallow

Distribución

Las plataformas de nivel 1 con soporte oficial son Linux para Intel de 64 bits que utiliza 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 entorno de ejecución WASI y Linux para Intel de 64 bits que utiliza una cadena de herramientas clang. Los sistemas de nivel 3 con soporte oficial incluyen ARM Windows de 64 bits, iOS de 64 bits, Raspberry Pi OS (Linux para armv7 con punto flotante duro), Linux para PowerPC de 64 bits en modo little-endian y Linux para s390x .

Más plataformas tienen implementaciones funcionales, entre ellas: [23]

Similar a Unix
Especial e integrado
Otro

PEP 11 [24] enumera las plataformas que no son compatibles con CPython según la Python Software Foundation . Estas plataformas aún pueden ser compatibles con puertos externos. Estos puertos incluyen:

Los puertos externos no integrados a la versión oficial de CPython de 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 API de gráficos y sonido para PSP y SMS y API de cámara para S60. Estos puertos incluyen:

Linux empresarial

Estas versiones de Python se distribuyen con las distribuciones de Linux empresariales compatibles actualmente. [33] 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.

Alternativas

CPython es una de las varias implementaciones de Python con "calidad de producción", entre las que se incluyen: Jython , escrita en Java para la máquina virtual Java (JVM); PyPy , escrita en RPython y traducida a C; y IronPython , escrita en C# para la Common Language Infrastructure . También existen varias implementaciones experimentales. [55]

Referencias

  1. ^ https://www.python.org/downloads/release/python-3130/. {{cite web}}: Falta o está vacío |title=( ayuda )
  2. ^ "Inicialización, finalización y subprocesos". Documentación de Python v3.8.3 . Consultado el 4 de junio de 2020 .
  3. ^ Jake Edge (15 de agosto de 2023). "Un GIL por intérprete". LWN . Consultado el 13 de enero de 2024 .
  4. ^ "PEP 684 – Un GIL por intérprete | peps.python.org" . Consultado el 13 de enero de 2024 .
  5. ^ "PEP 703 – Hacer que el bloqueo del intérprete global sea opcional en CPython | peps.python.org". peps.python.org . Consultado el 17 de septiembre de 2023 .
  6. ^ "PEP 719 – Calendario de lanzamiento de Python 3.13 | peps.python.org". peps.python.org . Consultado el 17 de septiembre de 2023 .
  7. ^ Paul, Ryan (26 de marzo de 2009). "Informe de Ars Technica sobre los objetivos de Unladen Swallow". Arstechnica.com . Consultado el 19 de agosto de 2011 .
  8. ^ ab Winter, Collin; Yasskin, Jeffrey; Kleckner, Reid (17 de marzo de 2010). "PEP 3146 - Fusión de Swallow sin carga en CPython". Python.org.
  9. ^ "Gente trabajando en Unladen Swallow". Archivado desde el original el 29 de octubre de 2015. Consultado el 8 de agosto de 2019 .
  10. ^ "Página del proyecto Unladen Swallow" . Consultado el 19 de agosto de 2011 .
  11. ^ "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 .
  12. ^ "Mensaje en comp.lang.python" . Consultado el 19 de agosto de 2011 .
  13. ^ "Golondrina sin carga | Grupos de Google" . Consultado el 19 de agosto de 2011 .
  14. ^ "publicación en Reddit de un colaborador de Unladen". Reddit.com. 24 de junio de 2010. Consultado el 19 de agosto de 2011 .
  15. ^ Winter, Collin (8 de noviembre de 2010). "Estado actual de Unladen-Swallow".
  16. ^ "Creación de rama de lanzamiento del cuarto trimestre de 2009". 26 de enero de 2010. Consultado el 19 de agosto de 2011 .
  17. ^ "Los desarrolladores se centran en la fusión con py3k-jit". 13 de julio de 2010. Consultado el 19 de agosto de 2011 .
  18. ^ "Línea base de golondrina sin carga". Python.org . Consultado el 19 de agosto de 2011 .
  19. ^ Kleckner, Reid (26 de marzo de 2011). "Retrospectiva de Unladen Swallow". QINSB no es un blog de software (qinsb.blogspot.com) .
  20. ^ "Unladen Swallow 2009Q1". unladen-swallow, Una implementación más rápida de Python . Consultado el 19 de octubre de 2012 .
  21. ^ "Unladen Swallow 2009Q2". unladen-swallow, Una implementación más rápida de Python . Consultado el 19 de octubre de 2012 .
  22. ^ "Unladen Swallow 2009Q3". unladen-swallow, Una implementación más rápida de Python . Consultado el 19 de octubre de 2012 .
  23. ^ "Implementaciones de Python" . Consultado el 19 de julio de 2012 .
  24. ^ "PEP 11 - Eliminación del soporte para plataformas poco utilizadas". Python.org . Consultado el 8 de agosto de 2019 .
  25. ^ "¿Irix aún recibe soporte?". 14 de febrero de 2009.
  26. ^ AmigaPython
  27. ^ iSeriesPython
  28. ^ PythonD
  29. ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 y 3
  30. ^ Python sin pila para PSP
  31. ^ Puerto Python para Windows CE
  32. ^ "Pitón". VSI . Consultado el 31 de agosto de 2021 .
  33. ^ "Ciclos de vida de soporte para distribuciones Enterprise Linux". Archivado desde el original el 2022-08-30 . Consultado el 2017-10-15 .
  34. ^ "Ciclo de lanzamiento de Ubuntu". Ubuntu . Consultado el 18 de enero de 2021 .
  35. ^ "Con Python 2 al final de su vida útil, Ubuntu 20.04 LTS avanza con la eliminación de Python 2 - Phoronix". phoronix.com . Consultado el 1 de abril de 2020 .
  36. ^ "Paquete binario "python3" en Ubuntu Focal". Launchpad.net .
  37. ^ "Ubuntu 18.04 se extiende hasta 2028". ServerWatch.com. 2018-11-15 . Consultado el 2019-09-09 .
  38. ^ ab "paquete python-defaults: Ubuntu". Canonical Ltd. 8 de junio de 2018. Consultado el 8 de junio de 2018 .
  39. ^ ab "paquete python3-defaults: Ubuntu". Canonical Ltd. 8 de junio de 2018. Consultado el 8 de junio de 2018 .
  40. ^ Ciencias, Facultad de Informática de la Universidad Carnegie Mellon. "Ubuntu 16.04: fin de su vida útil en 2021 - Instalaciones informáticas de la SCS - Universidad Carnegie Mellon". computing.cs.cmu.edu . Consultado el 15 de febrero de 2021 .
  41. ^ ab "Liberado Debian 12 Bookworm". debian.org .
  42. ^ ab "Debian -- Noticias -- Debian 11 "bullseye" publicado". debian.org . Consultado el 4 de enero de 2022 .
  43. ^ "LTS - Wiki de Debian". wiki.debian.org . Consultado el 15 de febrero de 2021 .
  44. ^ "Debian -- Detalles del paquete python en buster". packages.debian.org . Consultado el 13 de septiembre de 2019 .
  45. ^ "Debian -- Noticias -- Publicado el Debian 10 "buster"". debian.org . Consultado el 2019-08-09 .
  46. ^ "Debian -- Noticias -- El soporte a largo plazo de Debian 8 está llegando al final de su ciclo de vida". debian.org . Consultado el 15 de febrero de 2021 .
  47. ^ "DistroWatch.com: Debian". DistroWatch.com. 2017-10-15 . Consultado el 2017-10-15 .
  48. ^ "Debian -- Detalles del paquete python3 en stretch" . Consultado el 19 de diciembre de 2017 .
  49. ^ "Python en RHEL 8". Blog para desarrolladores de Red Hat . 14 de noviembre de 2018. Archivado desde el original el 10 de mayo de 2019. Consultado el 10 de mayo de 2019 .
  50. ^ "Ciclo de vida de Red Hat Enterprise Linux". Portal de clientes de Red Hat . Consultado el 1 de abril de 2020 .
  51. ^ "DistroWatch.com: Red Hat Enterprise Linux". DistroWatch.com. 7 de septiembre de 2017. Consultado el 15 de octubre de 2017 .
  52. ^ "DistroWatch.com: CentOS". DistroWatch.com. 14 de septiembre de 2017. Consultado el 15 de octubre de 2017 .
  53. ^ "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 .
  54. ^ ab "DistroWatch.com: openSUSE". DistroWatch.com. 2017-10-14 . Consultado el 2017-10-15 .
  55. ^ Martelli, Alex (2006). Python in a Nutshell (2.ª ed.). O'Reilly . Págs. 5-7. ISBN. 978-0-596-10046-9.

Lectura adicional

Enlaces externos