programming oriented opp exercises español and python oop

oriented - Cómo medir el tiempo de ejecución de funciones(automáticamente) en Python



python oop exercises (3)

Necesito tener una clase base que usaré para heredar otras clases que me gustaría medir el tiempo de ejecución de sus funciones.

Así que en vez de tener algo como esto:

class Worker(): def doSomething(self): start = time.time() ... do something elapsed = (time.time() - start) print "doSomething() took ", elapsed, " time to finish" #outputs: doSomething() took XX time to finish

Me gustaría tener algo como esto:

class Worker(BaseClass): def doSomething(self): ... do something #outputs the same: doSomething() took XX time to finish

Así que la clase base necesita lidiar con la medición del tiempo.


¿Has comprobado el módulo "perfil" ?

¿Está seguro de que necesita implementar su propio marco personalizado en lugar de utilizar el mecanismo de creación de perfiles predeterminado para el idioma?

También puede buscar en Google "hotshot de Python" para una solución similar.


También existe timeit , que forma parte de la biblioteca estándar y es realmente fácil de usar. Recuerda: ¡no reinventes la rueda!


Una forma de hacerlo sería con un decorador (PEP para decoradores) (el primero de una serie de artículos de tutoría sobre decoradores) . Aquí hay un ejemplo que hace lo que quieres.

from functools import wraps from time import time def timed(f): @wraps(f) def wrapper(*args, **kwds): start = time() result = f(*args, **kwds) elapsed = time() - start print "%s took %d time to finish" % (f.__name__, elapsed) return result return wrapper

Este es un ejemplo de su uso.

@timed def somefunction(countto): for i in xrange(countto): pass return "Done"

Para mostrar cómo funciona, llamé a la función desde el indicador de python:

>>> timedec.somefunction(10000000) somefunction took 0 time to finish ''Done'' >>> timedec.somefunction(100000000) somefunction took 2 time to finish ''Done'' >>> timedec.somefunction(1000000000) somefunction took 22 time to finish ''Done''