Exemplo de uso:
@print_performance
def minha_funcao():
pass
Implementação:
try:
from functools import wraps
except ImportError:
# Python 2.3, 2.4 fallback.
from django.utils.functional import wraps
import time
def print_performance(function):
def wrapped_function(*args, **kwargs):
print('START %s(%s)' % (function.__name__, args,))
start_time = time.clock()
exception = None
try:
result = function(*args, **kwargs)
except Exception, e:
exception = e
end_time = time.clock()
if exception:
print('END-ERROR %s(%s): %ss' % (function.__name__, args, str(end_time - start_time)))
raise exception
print('END %s(%s): %ss' % (function.__name__, args, str(end_time - start_time)))
return result
return wraps(function)(wrapped_function)
Sim, decorators são bem legais mesmo! No passado escrevi isto a respeito: http://blog.paulojeronimo.com/2009/04/o-do-phyton-parece-com-o-do-java-mas.html
ResponderExcluir[]s,
PJ
Bacana, vou ver lá! Alias, fiz umas atualizações no código, só melhorando um pouco as strings do print para ajudar no debug. abs!
ResponderExcluir