Lo siento, no estoy familiarizado con Python, pero hay una general method que funciona, suponiendo que se puede interrumpir manualmente la ejecución en un tiempo aleatorio.
Simplemente hágalo y visualice la pila de llamadas. Te dirá, con alta probabilidad, lo que quieres saber. Si quieres estar más seguro, hazlo varias veces.
Funciona porque la persona que llama culpable tiene que estar en la pila de llamadas durante la fracción de tiempo desperdiciada, lo que la expone a las interrupciones durante la mayor parte del tiempo, ya sea durante llamadas cortas o algunas Largos.
NOTA: Este proceso es más parecido al diagnóstico que a la medición. Supongamos que una mala llamada está perdiendo el 90% del tiempo. Luego, cada vez que la detenga, la probabilidad es del 90% de que la declaración de llamada incorrecta esté allí en la pila de llamadas para que usted la vea, y podrá ver que es mala.Sin embargo, si quiere medir exactamente el desperdicio, ese es un problema diferente. Para eso, necesitará muchas más muestras, para ver qué porcentaje contiene esa llamada. O, como alternativa, solo arregla la llamada culpable, registra la aceleración, y eso te dirá exactamente qué fue el desperdicio.
Si guarda los resultados de cProfile en un archivo y utiliza el módulo 'pstats' para cargar el perfil, puede consultar directamente las llamadas de la función pesada:' loaded_stats_object.print_callers ('heavy_function') ' –