Quiero crear una función de Python para probar el tiempo empleado en cada función e imprimir su nombre con su tiempo, cómo puedo imprimir el nombre de la función y si hay otra forma de hacerlo, por favor dígame
def measureTime(a):
start = time.clock()
a()
elapsed = time.clock()
elapsed = elapsed - start
print "Time spent in (function name) is: ", elapsed

timeitpara la medición. No es perfecto, pero supera con creces su puñalada y es mucho más fácil de usartimeitque preparar algo mejor usted mismo.Respuestas:
En primer lugar, le recomiendo usar un perfilador o al menos usar el tiempo .
Sin embargo, si desea escribir su propio método de tiempo estrictamente para aprender, aquí hay un lugar para comenzar a usar un decorador.
Python 2:
Y el uso es muy simple, solo use el decorador @timing:
Python 3:
Tenga en cuenta que estoy llamando
f.func_namepara obtener el nombre de la función como una cadena (en Python 2) of.__name__en Python 3.fuente
Después de jugar con el
timeitmódulo, no me gusta su interfaz, que no es tan elegante en comparación con los dos métodos siguientes.El siguiente código está en Python 3.
El método decorador
Esto es casi lo mismo con el método de @ Mike. Aquí agrego
kwargsyfunctoolsenvuelvo para hacerlo mejor.El método del administrador de contexto
Por ejemplo, puedes usarlo como:
Y el código dentro del
withbloque será cronometrado.Conclusión
Usando el primer método, puede comentar fácilmente el decorador para obtener el código normal. Sin embargo, solo puede cronometrar una función. Si tiene alguna parte del código que no sabe qué hacer para que sea una función, puede elegir el segundo método.
Por ejemplo, ahora tienes
Ahora quieres cronometrar la
bigImage = ...línea. Si lo cambia a una función, será:No se ve tan bien ... ¿Qué pasa si estás en Python 2, que no tiene
nonlocalpalabra clave?En cambio, usar el segundo método encaja muy bien aquí:
fuente
timeitinterfaz y usar lawraps()función delfunctoolsmódulo. Me refiero a que todo ese código extra no es necesario.import functoolsNo veo cuál es el problema con el
timeitmódulo. Esta es probablemente la forma más sencilla de hacerlo.También es posible enviar argumentos a las funciones. Todo lo que necesitas es terminar tu función usando decoradores. Más explicación aquí: http://www.pythoncentral.io/time-a-python-function/
El único caso en el que podría estar interesado en escribir sus propias declaraciones de temporización es si desea ejecutar una función solo una vez y también desea obtener su valor de retorno.
La ventaja de usar el
timeitmódulo es que le permite repetir el número de ejecuciones. Esto puede ser necesario porque otros procesos pueden interferir con la precisión de su tiempo. Por lo tanto, debe ejecutarlo varias veces y mirar el valor más bajo.fuente
timeit.timeit(lambda: func(a,b,c), number=1)? Lo uso cuando hago pruebas en una solución hipotética en una terminal.Timeit tiene dos grandes fallas: no devuelve el valor de retorno de la función y usa eval, que requiere pasar un código de configuración adicional para las importaciones. Esto resuelve ambos problemas de manera simple y elegante:
fuente
Hay una herramienta fácil para el tiempo. https://github.com/RalphMao/PyTimer
Puede funcionar como un decorador :
Salida:
También puede funcionar como un temporizador de complemento con control de espacio de nombres (útil si lo está insertando en una función que tiene muchos códigos y se puede llamar a cualquier otro lugar).
Salida:
Espero que ayude
fuente
Método de decorador utilizando la biblioteca decoradora de Python:
Ver publicación en mi blog:
publicar en el blog mobilepro.pl
mi publicación en Google Plus
fuente
Mi forma de hacerlo:
Establezca una variable como
start = time()antes ejecute la función / bucles, yprintTime(start)justo después del bloque.y tienes la respuesta
fuente