2011-05-11 5 views
18

estoy usando Python (v2.4) profile módulo para perfilar un guión numpy, y la siguiente entrada parece dar cuenta de la mayor parte del tiempo de ejecución (?):módulo de perfil de Python: <string>: 1

ncalls tottime percall cumtime percall filename:lineno(function) 
256/1 0.000 0.000 7.710 7.710 <string>:1(?) 

Desafortunadamente, su apariencia hace que sea difícil para Google.

¿Cómo hago para averiguar qué es exactamente?

editar El perfilador se ejecuta desde la cáscara de la siguiente manera: python -m profile -s cumulative script.py

+0

¿Está utilizando 'profile.run()' para ejecutar el generador de perfiles? Luego ': 1' se refiere a la primera línea de la cadena de instrucciones que pasó a esta función. Si llama al generador de perfiles de otra manera, especifique. –

+0

@Sven Marnach: Buen punto, he agregado esta información a la pregunta. – NPE

+1

Suponiendo que pregunta porque desea un mayor rendimiento, [intente esto] (http://stackoverflow.com/questions/4295799/how-to-improve-performance-of-this-code/4299378#4299378). –

Respuesta

19

Ignorar esta línea. Es un artefacto de cómo se implementa el perfilador. No te dice nada útil. Mire el valor "tottime" para ello: 0.000. "tottime" es la cantidad de tiempo dedicado a ejecutar "<cadena>: 1 (?)" excluyendo el tiempo empleado ejecutando hijos de la misma. Entonces, no pasamos el tiempo aquí. "cumtime" y "percall" son grandes porque incluyen el tiempo que se pasa en los niños. Vea http://docs.python.org/library/profile.html#cProfile.run para más detalles.

+1

, pero ¿qué ocurre si el * tottime * más grande es ': 1 ()'? – endolith

+4

': 1 ()' es el código de nivel superior en el script de inicio de Python invocado. Entonces, si todo su código es de nivel superior en "foo.py" y lo hace 'python foo.py', entonces verá un tiempo de espera alto para' : 1 () '. Por "nivel superior", quiero decir que no dentro de ninguna definición de función, simplemente ejecute directamente. –