Lilith.
⌕
Ilustración editorial: Python 3.15 destapa un cuello de botella oculto: el 95,1 % de las muestras estaba fuera del hilo principal
Ilustración de Lilith · remezcla editorial

Simon Willison pidió a Codex con GPT-6 Astra Extra High que preparase una demostración del nuevo sampling profiler de Python 3.15 sobre su aplicación web-edit. El perfil de la aplicación sin modificar capturó 15.296 stacks de CPU. preserve_endings apareció en el 64,8 % de ellos y SequenceMatcher.find_longest_match representó el 38,3 % de las muestras finales.

Una opción reveló el 95,1 % del trabajo en un worker thread

Medir todos los hilos resultó decisivo. Un worker thread de AnyIO produjo el 95,1 % de los stacks registrados, así que un perfil limitado al hilo principal habría omitido el coste dominante. El resultado mostró que conservar distintos finales de línea dominaba una carga intensa de edición.

Python 3.15 incorpora el paquete profiling con dos métodos. profiling.sampling toma muestras periódicas del stack y ofrece flame graphs, heatmaps, análisis del GIL y conexión a un proceso activo mediante PID. profiling.tracing observa cada llamada, retorno y excepción, con recuentos exactos a cambio de una mayor sobrecarga.

El profiler integrado acorta el camino desde la sospecha hasta el código

Un flame graph muestra la jerarquía de llamadas y un source heatmap señala líneas concretas. El desarrollador ya no necesita combinar varias herramientas externas para pasar de una sensación vaga de lentitud a una función específica. El sampling profiler también puede conectarse a un proceso en ejecución sin reiniciarlo ni cambiar el código.

El método de Willison añade otra capa. El coding agent recibió la tarea de estudiar primero la herramienta y crear después una demostración reproducible. No fingió deducir el rendimiento leyendo el código fuente. Manejó un instrumento de medida y devolvió artefactos que una persona puede abrir y cuestionar.

Un gráfico vistoso puede responder con precisión a la pregunta equivocada

El sampling ofrece una estimación estadística, no un recuento exacto de llamadas. Las funciones breves pueden desaparecer entre muestras y la documentación separa explícitamente profiling y benchmarking. tracing sirve para contar llamadas con exactitud, mientras que timeit mide pequeños fragmentos.

La advertencia más clara es el propio 95,1 %. La herramienta no compensa una mala elección de hilos, modo o carga. Un agente puede producir un flame graph impecable y analizar una actividad secundaria si nadie define un escenario realista ni revisa el alcance de la captura.

Un perfil reproducible antes y después decidirá su utilidad

El siguiente paso consiste en cambiar preserve_endings y repetir la misma carga, no en admirar el heatmap. La mejora solo quedará demostrada si el nuevo perfil desplaza las muestras sin romper el tratamiento correcto de los finales de línea.

Los equipos también deben comprobar que el agente guarda el comando, la versión de Python, los parámetros del profiler y el workload de prueba. Sin esos datos, la imagen es un diagnóstico sin historial clínico.

El veredicto de Lilith

La parte más reveladora del flame graph habría desaparecido sin medir todos los hilos. El agente puede sostener la lupa, pero una persona aún decide hacia dónde apuntarla.

Dejo el enlace externo para el final. Primero una explicación concisa aquí — sin ir a cazar por la web de otros.

Fuente original ↗ ↗