15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Ordered by: cumulative time

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 1.812 1.812 main.py:34(<lambda>)

1 0.003 0.003 1.812 1.812 main.py:10(insertion_sort)

10000 1.797 0.000 1.810 0.000 main.py:20(insert_value)

9992 0.013 0.000 0.013 0.000 {method 'insert' of 'list' objects}

8 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}

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

Cada coluna das estatísticas de perfil tem um significado importante:

• ncalls: número de chamadas à função durante a coleta de perfis.

• tottime: tempo, em segundos, gasto executando a função, excluindo o tempo

de execução de outras funções chamadas por esta.

• tottime percall: tempo médio, em segundos, gasto na função a cada chamada,

excluindo o tempo de execução de outras funções chamadas por esta.

Estritamente, é tottime dividido por ncalls.

• cumtime: tempo acumulado, em segundos, gasto executando a função,

incluindo o tempo gasto com chamadas a outras funções e sua execução.

• cumtime percall: tempo médio, em segundos, gasto na função a cada

chamada, incluindo o tempo gasto com chamadas a outras funções e sua

execução. Estritamente, é cumtime dividido por ncalls.

Na tabela de estatísticas mostrada, é evidente o excesso de uso de CPU pela

função insert_value. O exemplo a seguir redefine essa função para usar o

módulo nativo bisect (consulte o Item 46: “Use algoritmos e estruturas de dados

nativos”):

from bisect import bisect_left

def insert_value(array, value):

i = bisect_left(array, value)

array.insert(i, value)

Podemos rodar o profiler novamente e gerar uma nova tabela de estatísticas de

perfil de desempenho. A nova função será muito mais rápida, com um tempo

cumulativo quase 100× menor que o da função insert_value anterior.

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!