Pasar al contenido principal
Una versión que redefine la concurrencia y moderniza el lenguaje para afrontar los desafíos actuales
28/11/2025
cubos flotando

En estos últimos años, en la industria de la informática hemos visto un cambio significativo en el panorama general de los lenguajes de programación. Cada año estos mutan, al igual que las necesidades de clientes, programas y empresas. Esto crea nuevas tendencias que afectan directamente a cómo y qué se programa y, por ello, se ha de estar atento a las tendencias que acaparan la atención general.

Un importante dato es el lenguaje más popular del momento, que desde hace ya más de cinco años le arrebató el título al longevo y conocido Java para hacerse con el trono hasta el día de hoy: Python, el lenguaje interpretado de alto nivel y propósito general que ha ido haciéndose un hueco cada vez más grande gracias a su potencia y facilidad de aprendizaje.

Ahora, con el lanzamiento de su versión 3.14, trae novedades que ayudarán a que sus ya notorias virtudes brillen con aún más fuerza. A continuación, se comentarán las más importantes y cómo estas influyen beneficiosamente en el lenguaje.

¿Qué ha sido de Python hasta ahora?

Hasta ahora, Python se ha desenvuelto correctamente en muchos campos. Debido a la facilidad de su sintaxis y a la versatilidad en sus posibilidades de uso, se trata de un lenguaje recomendable tanto para expertos como para nuevos programadores; para desarrollo web tradicional o para inteligencia artificial. Si a esto se le suma una amplia variedad de herramientas en su biblioteca estándar y una creciente comunidad activa, casi resulta un lenguaje perfecto, pero nada más lejos de la realidad.

Si bien podemos ver que cuenta con cantidad de virtudes, Python arrastra desde sus inicios un problema que afecta directamente a la concurrencia de sus programas. Este problema se trata de GIL (Global Interpreter Lock).

¿Y en qué afecta este GIL? En Python, cada objeto tiene un contador que determina cuántos objetos quieren información sobre ellos. Cuando este llega a 0, se recoge por el recolector de basura. Esta metodología ayuda a controlar cómo los hilos utilizan la información para evitar incongruencias, o dificultades en su entendimiento, pero esto a día de hoy se ha convertido en un inconveniente, pues en ordenadores actuales con procesadores multinúcleo, la compatibilidad multihilo es necesaria y el GIL, que solo permite que un hilo tenga acceso al intérprete de Python a la vez, trae más inconvenientes que ventajas

Hasta ahora han ido apareciendo estrategias para sobrellevar este problema, siendo la más conocida de estas la biblioteca de multiprocesamiento. Esta se encarga de sortear el problema de correr varios hilos en paralelo permitiendo a los programadores crear procesos independientes que se ejecuten en diferentes núcleos del sistema. El problema es que estos procesos tienen un coste, pues consumen significativamente más memoria que lanzar hilos y requieren mecanismos explícitos para compartir la información, como pueden ser colas, pipes o memoria compartida. Estos procesos pesados y la complejidad añadida harían que esta biblioteca no se asentase como la solución definitiva al principal problema de este gran lenguaje y es por esto que en la nueva versión que atañe actualmente, la 3.14, se volverá a hacer frente a este problema.

Nueva concurrencia, nuevas posibilidades

Ahora más que nunca la comunidad pide rendimiento sin perder sencillez, y Python está dando un paso importante en la dirección correcta. Para ello lo ideal sería eliminar el GIL, puesto que es precisamente el que atribuye los inconvenientes que impiden este cambio. El problema radica en cómo se realizarán las tareas del GIL en cuanto este desaparezca. Y Python ya tiene una solución para ello:

  • Recuento de referencias sesgado: : Ahora no podremos usar el recuento de referencias no atómico con el que contaba GIL y utilizar el recuento atómico es costoso y lento, por lo que se dispondrá de un recuento de referencias sesgado, que consistirá en “inclinar” cada objeto hacia un hilo propietario que puede modificar su referencia de forma no atómica, mientras que otros hilos sí usan operaciones atómicas, manteniendo la seguridad sin penalizar con peor rendimiento. Además, algunos objetos comunes como True, False, enteros pequeños o cadenas internadas, serán marcados como inmortales, lo que producirá que nunca se liberen, no requiriendo recuento de referencias y reduciendo así la carga del sistema.
  • Recolección de basura: Ahora que el GIL no se encargará automáticamente, se ha modificado la forma de tratar la basura. En vez de eliminar objetos inmediatamente al bajar su contador, las disminuciones se registran en una tabla que se revisa dos veces, evitando así eliminar prematuramente objetos que aún se encuentran en uso en otros hilos. Hay que tener en cuenta que para que este proceso se realice correctamente, el recuento de referencias debe ser estable durante la recolección de basura, por lo que se pausarán momentáneamente todos los hilos para asegurar que ningún objeto cambie su recuento de referencias en medio del proceso.
  • Asignación de memoria: Sustituyendo a pymalloc, aparece otro asignador seguro para múltiples hilos, rápido y optimizado para objetos pequeños. Organiza a memoria en páginas y bloques del mismo tamaño, reduciendo contención y haciendo innecesarios ciertos bloqueos en estructuras internas.

Y para poder ver todos estos cambios con mayor claridad, se va a comparar cómo se realizaría un
código concurrente en Python 3.12 en relación a la nueva manera de hacerlo en Python 3.14

Se utilizará un código de prueba a modo de Benchmark que tratará de calcular números primos:

ejemplo código Python

El código encargado del cálculo principal no afecta a lo que se quiere demostrar, por lo que será el mismo para ambas versiones de Python

Tras definir el cálculo, se realizará de manera secuencial:

Ejecución secuencial Python

Ejecución secuencial basada en el uso de hilos de Python 3.12

Y también su alternativa usando la versión Python 3.14t (siendo “t” necesario, pues es la versión 
free-threaded, o lo que es lo mismo, sin GIL):

Imagen
Python 3.14 sin GIL

A diferencia de la anterior, esta se ejecuta con diferentes hilos para aprovechar el cálculo en
paralelo de Python 3.14 sin GIL

 

Como resultados, podemos observar cómo la versión donde se aprovecha el procesamiento 
multihilo es considerablemente más veloz:

Resultado al compilar con Python 3.12

Resultado al compilar el programa con Python 3.12

Resultado al compilar con Python 3.14t

Resultado al compilar el programa con Python 3.14t

No todo se reduce a la concurrencia:

Además de las optimizaciones para concurrencia y la eliminación parcial del GIL, Python 3.14 no se queda ahí y trae o consolida otra serie de propuestas (las llamadas PEP en Python, que se tratan de las siglas de Python Enhancement Proposals, utilizadas para definir nuevas funcionalidades o propuestas dentro del lenguaje) que vale la pena mencionar:

  • Múltiples intérpretes en memoria compartida

    Gracias al módulo concurrent.interpreters (PEP 734), ahora se pueden crear y gestionar
    intérpretes aislados dentro del mismo proceso. Esto permite paralelismo multi-núcleo con
    menor coste que usar procesos externos.

  • Evaluación diferida de anotaciones:

    Las anotaciones de tipo ya no se evaluarán al definir funciones, sino solo cuando sean
    necesarias (PEP 649). Esto mejora el rendimiento en el arranque y reduce la sobrecarga.

  • Literales de plantilla (“t-strings”)

    Aparece la nueva sintaxis con prefijo “t”, similar a los f-strings (forma de formatear cadenas
    en Python), pero que no evalúa directamente: en su lugar construye un objeto representando
    las partes estáticas y las interpoladas, lo que permite manipular la plantilla antes de
    evaluarla. (PEP 750)

  • Interfaz segura para depuradores externos

    Se introduce un nuevo mecanismo (PEP 768) que permite que depuradores o perfiles se
    conecten a procesos Python en ejecución sin detenerlos ni añadir sobrecarga significativa.

  • Compresión con Zstandard en la biblioteca estándar

    El módulo compression.zstd proporciona soporte nativo para el algoritmo Zstandard, que
    es rápido y eficiente. Además, módulos como tarfile, zipfile o shutil (con utilidades para
    gestionar ficheros, comprimidos y directorios) ya pueden trabajar con archivos .zst. (PEP
    784)

  • Modo “free-threaded” mejorado

    El modo sin GIL (“free-threaded”, PEP 703) mejora en esta versión: se han terminado
    optimizaciones en el intérprete y la penalización para código monohilo se ha reducido entre
    un 5% y un 10%.

  • Mejoras en los mensajes de error

    Mensajes más claros y útiles, con sugerencias y advertencias más precisas, lo que ayuda
    mucho a depurar y comprender errores comunes.

  •  Sintaxis coloreada en la REPL

    El intérprete interactivo (REPL) ahora tiene resaltado de sintaxis, lo que mejora la
    legibilidad al escribir código directamente en consola.

Conclusión:

Python 3.14 demuestra que el lenguaje más popular no se conforma con lo logrado hasta ahora, sino
que sigue evolucionando para adaptarse a los retos actuales. La eliminación parcial del GIL, junto 
con mejoras en el recuento de referencias, la recolección de basura y la asignación de memoria, abre
la puerta a una concurrencia más eficiente y segura, aprovechando mejor los procesadores 
multinúcleo.

Pero no solo se centra en la concurrencia: ofrece nuevas funcionalidades como múltiples 
intérpretes en memoria compartida, compresión nativa con Zstandard y la evaluación diferida de 
anotaciones muestran cómo el lenguaje sigue creciendo en rendimiento y facilidad de uso.

En resumen, esta versión consolida a Python como un lenguaje potente, versátil y moderno, capaz 
de ofrecer tanto simplicidad como rendimiento, y prepara el terreno para que los desarrolladores 
exploren nuevas posibilidades sin renunciar a la facilidad de aprendizaje que lo ha hecho tan 
popular.

Imagen
imagen rubén

Rubén Gadea
Software Technician
ALTIA