E ai pessoal, tudo bem?
O último post foi bem extenso porque eu precisava dar um overview sobre o assunto, mas este será mais objetivo. Depois de escrever sobre profiling tive oportunidade de aplicar o que venho estudando em um projeto e ver, na prática, o quanto este conhecimento é importante. Também recebi boas criticas sobre a publicação anterior, sinal que o assunto é do interesse de mais gente! Por tanto, vamos a uma dica que tem me ajudado bastante.
Das ferramentas citadas no post anterior tenho usado muito o Django Debug Toolbar e o modulo timeit do Python, mas nenhum dos dois supriu minha necessidade de saber, de forma simples e rápida, quanto tempo um determinado método ou uma view do Django demora para ser executada. No inicio eu fiz a subtração do tempo, como o módulo time, no próprio método mas logo percebi que precisava de um decorator. Depois de pesquisar um pouco, cheguei a minha versão do mesmo que compartilho com vocês:
import time def timing_logger(timed): def wrap(*args, **kwargs): start = time.time() res = timed(*args, **kwargs) delta = time.time() - start print '%.3f secs on %s' % (delta, timed.func_name) return res wrap.__doc__ = timed.__doc__ wrap.__name__= timed.__name__ return wrap
Procurando na internet, ou mesmo em meu post anterior, é possível encontrar soluções mais elaboradas como os módulos Python profile, hotshot e os projetos django-extensions e KCachegrind mas estes não são muito práticos já que não permitem grande agilidade na analise do profiling. Desta forma, acabo deixando para usar analises mais elaboradas quanto a informação de tempo gasto não é suficiente, um exemplo disso são view ou métodos muito grandes e que tem várias chamadas para outros métodos.
Este decorator tem sido uma das principais ferramentas que estou usando na refatoração de um sistema para melhorar a performance e pretendo usa-lo nos próximos posts onde vou me aprofundar mais sobre profiling e dicas para melhorar a performance de apps Django.
Espero que ajude vocês tanto quanto tem me ajudado. Um abraço!
Nenhum comentário:
Postar um comentário