Desarrollador Python: pregunta de entrevista
¿Cómo analizas un servicio Python lento?
Perfila un servicio Python lento con carga representativa: separa latencia externa de CPU y asignaciones, usa tracing y cProfile o py-spy, optimiza la ruta medida y compara con la línea base.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
Empieza por clasificar la lentitud con trazas y métricas: el tiempo esperando a la base de datos u otros servicios no es un problema de Python y ningún profiler lo arreglará. Para tiempo de CPU, py-spy se adhiere al proceso en marcha sin cambiar código y produce flame graphs bajo tráfico real; cProfile da conteos de llamadas en un script reproducible; tracemalloc o memray revelan puntos calientes de asignación. Arregla el mayor contribuyente, vuelve a medir con la misma carga y conserva los números de antes y después.
Ejemplo
Un endpoint con p95 de 800 ms gastaba 600 ms serializando un resultado ORM grande con un to_dict genérico; py-spy mostró los frames, un serializador a medida para ese endpoint lo bajó a 150 ms y una prueba de carga con la misma mezcla de solicitudes confirmó la mejora. Las consultas a base de datos ya estaban por debajo de 40 ms.
Errores frecuentes
- Perfilar una sola solicitud en un portátil y extrapolar al tráfico de producción.
- Microoptimizar bucles mientras una consulta N+1 domina la traza.
- Aplicar caché o Cython antes de confirmar qué frames están realmente calientes.
Una estructura útil para responder
Responde desde tu propia experiencia.
No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.