21 puntos por darjeeling 2025-05-20 | 12 comentarios | Compartir por WhatsApp

Ahora es un buen momento para contribuir a Free Threading Python

Voy a hacer un breve resumen de lo que he entendido hasta ahora sobre Free Threading Python en PyCon US 2025 y también organizar algunas ideas sobre cómo contribuir.

¿Qué es Free Threading Python?

Free Threading Python es un proyecto que busca eliminar el GIL (Global Interpreter Lock) de Python para mejorar el rendimiento en entornos multihilo. Este proyecto comenzó para mejorar el rendimiento del multithreading en Python y ofrecer un mejor desempeño en tareas CPU-bound.

Todavía está en una etapa experimental, y hay que recompilar e instalarlo o instalarlo mediante uv.

Situación actual

Yo también solo lo he estado probando, pero dicen que la mayoría de las librerías escritas en Python puro no tienen problemas de uso. Sin embargo, muchas de las librerías de uso generalizado suelen cargar librerías hechas en C/C++ o implementar extensiones directamente por razones de rendimiento o de implementación, así que para usar Free Threading Python con ese tipo de librerías hay que aplicar varias estrategias.

En el caso de usar módulos de extensión

La mayoría usa los siguientes métodos, y existe una guía de portabilidad.

  • C API
  • Cython
  • PyBind11
  • nanonbind
  • PyO3
  • f2py

CFFI todavía no es compatible, pero se puede usar con el fork de Quansight.
Existe un issue que dice que no planean dar soporte, pero como CFFI se usa mayormente para interfacing, es una decisión comprensible. Si se usa el CFFI con fork, se puede utilizar Free Threading Python, aunque como no es una implementación detalladamente ajustada, parece que el rendimiento bajará.

Cómo contribuir

Desde aquí parece como lanzarse a un pozo profundo, pero cuando participé en el sprint todo el mundo fue muy positivo, así que todavía me parece un buen momento para contribuir. Las formas de contribuir son las siguientes.

Consultar lo siguiente para comprobar si la compatibilidad con free-threading-python es buena

Después de probar, registrar un issue

Primero instalen Python 3.13 free-threading, luego instalen la librería y ejecuten las pruebas.
Si es posible, también estaría bien probar la versión 3.14t, pero como todavía está en beta, conviene empezar primero con la versión 3.13.

Hacer el port y enviar un PR

A partir de aquí se vuelve un poco difícil. Hace falta cierto nivel de comprensión de multihilo, varias system calls, C/C++ y del interior de Python.
La parte más difícil es que muchas librerías tienen dependencias entre sí, así que cuando usan otras librerías y esas aún no tienen soporte, hay que empezar por ahí.

Yo también, al participar en el sprint, solo alcancé a mapear un poco la situación, y queda algo así.

  • fastapi -> uvicorn -> uvloop, cryptography, pycares

Escribir sobre cómo contribuir

Es lo que estoy haciendo ahora mismo, aunque seguro se queda corto. Escribamos y publiquémoslo en varios lugares.

Escribir sobre cómo usar free-threading-python

Como faltan textos sobre esto, conviene hacer pruebas de rendimiento, escribir guías de uso, organizar la información y publicarla como artículo.

Sobre por qué hay que contribuir ahora

Creo que llevo un poco más de 25 años dentro del ecosistema open source. No soy un gran contribuidor de open source, pero entre mis conocidos hay muchos que sí contribuyen, incluso dos CPython Core Developers, además de muchos otros. Por eso, al hablar con estas personas, he desarrollado cierta intuición.

Conviene contribuir cuando todavía no hay nada o cuando hay un gran cambio. Por ejemplo, Jang Hye, que contribuyó en los inicios de Python, hizo muchas otras cosas, pero también trabajó en Unicode y en códecs coreanos. En ese momento no había nada, y como los principales contribuidores no conocían los códecs coreanos, imagino que era relativamente más fácil entrar. Y el siguiente gran cambio fue la transición a Python 3. Después vino la parte de asyncio; ahí recuerdo a Kim Jun-gi, además de muchas otras personas. Y ahora apareció otra función nueva: free-threading. Yo creo que este es el mejor momento para contribuir.

En otros lenguajes, como los cambios suelen decidirse dentro de empresas o en frameworks administrados por grandes corporaciones, no es nada fácil. Por supuesto, Python tampoco es extremadamente fácil de abordar, pero existen innumerables librerías y frameworks, ahora es posible portarlos uno por uno y se necesita mucha gente, así que este es el momento.

12 comentarios

 
ahwjdekf 2025-05-22

Una gran razón por la que Python era popular es que ni siquiera hacía falta considerar este tipo de multithreading. Si además hay que tomar en cuenta cosas así, terminará convirtiéndose en un lenguaje que la gente común no podrá usar fácilmente.

 
darjeeling 2025-05-23

Sigue siendo una función opcional, y es muy probable que el multithreading continúe siendo opcional. (activar la opción, hacer una instalación por separado, etc.)
Yo tampoco uso mucho Type, y probablemente use free-threading por temas de rendimiento, pero creo que será en casos muy limitados.

 
corona10 2025-05-23

No lo consideramos opcional. Una vez que se apruebe la PEP 779, el objetivo es cambiar la implementación predeterminada a una con free threading en el futuro.

 
darjeeling 2025-05-27

Era con la intención de que quizá se pudiera usar sin pensarlo demasiado, como type. Jeje.

 
ahwjdekf 2025-05-22

Esto de Python con free threading definitivamente no parece ser nada fácil. Se siente como abrir la caja de Pandora. Existe la posibilidad de que broten todo tipo de bugs de sincronización que hasta ahora estaban ocultos, y además que exploten en tiempo de ejecución solo muy de vez en cuando. Parece que los problemas que daban dolor de cabeza al desarrollar con multithreading ahora también podrían empezar a aparecer en serio en Python. Con solo ver la familia de C, ya queda claro que usar funciones que no son thread-safe causará problemas de inmediato.

 
kissdesty 2025-05-21

Ojalá aparezca un agente que haga el porting y las pruebas automáticamente.

 
darjeeling 2025-05-21

Como es un problema de multithreading, no será fácil.

 
ilotoki0804 2025-05-21

¡Se puede instalar fácilmente incluso desde deadsnakes o desde los instaladores oficiales de Windows o macOS, sin necesidad de compilarlo tú mismo!

 
darjeeling 2025-05-20

Hay muchos errores tipográficos. T_T Como no pude actualizar aquí, lo actualicé en el blog.

 
jasonroh 2025-05-21

Hola, vi esta publicación por una recomendación de Google y por eso me estoy contactando. He trabajado 5 años como desarrollador de Python en el extranjero (13 años en desarrollo en general), pero ahora mismo estoy descansando un tiempo en Corea. Me gustaría contribuir... ¿podría pedirte tu correo electrónico? Quisiera ponerme en contacto contigo y aprender sobre esto.

 
jasonroh 2025-05-21

Mi correo electrónico es josephroh@naver.com. Gracias.

 
darjeeling 2025-05-23

Le envié un correo. Gracias.