15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

>>>

20242 function calls in 0.208 seconds

Ordered by: cumulative time

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 0.208 0.208 main.py:176(my_program)

20 0.005 0.000 0.206 0.010 main.py:168(first_func)

20200 0.203 0.000 0.203 0.000 main.py:161(my_utility)

20 0.000 0.000 0.002 0.000 main.py:172(second_func)

1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}

A função my_utility é claramente a causa da maior parte do tempo de execução,

mas fica imediatamente óbvio o porquê de a função ser chamada tantas vezes. Se

procurarmos no código-fonte, encontraremos muitos lugares em que my_utility é

chamada e isso não contribuirá em nada para diminuir nossa confusão.

Para lidar com o problema, o Python profiler oferece uma maneira de conferir

quais chamadores contribuíram para a informação de perfil em cada função.

stats.print_callers()

A tabela de estatísticas de perfil de desempenho mostra, à esquerda, as funções

chamadas e, à direita, quem foi responsável por fazer a chamada. Fica bastante

claro que first_func é quem mais chama my_utility:

>>>

Ordered by: cumulative time

Function

was called by...

ncalls tottime cumtime

main.py:176(my_program) <-

main.py:168(first_func) <- 20 0.005 0.206 main.py: 176(my_program)

main.py:161(my_utility) <- 20000 0.202 0.202 main.py: 168(first_func)

200 0.002 0.002 main.py:172(second_func)

main.py:172(second_func) <- 20 0.000 0.002 main.py: 176(my_program)

Lembre-se

• É importante traçar o perfil de desempenho dos programas em Python antes

de otimizar o código porque a origem dos episódios de lentidão pode ser

obscura.

• Use o módulo cProfile em vez do módulo profile porque as informações de

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!