Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Noções Básicas de Temporização e Benchmarking | Compreensão e Medição de Desempenho
Técnicas de Otimização em Python

bookNoções Básicas de Temporização e Benchmarking

Como não estamos enfatizando a análise de complexidade de tempo neste curso, o foco será em métodos empíricos (práticos) para medir o desempenho real do código. Uma das formas mais simples de medir o desempenho de um trecho de código é utilizando a função embutida time.time().

Essa função retorna o tempo atual em segundos desde a época (o ponto de referência do sistema para o tempo). Chamando time.time() antes e depois de um trecho de código, é possível calcular a diferença para saber quanto tempo levou para executar.

123456789101112131415
import time # Record the start time start_time = time.time() # Code you want to measure result = [x**2 for x in range(1000000)] # Record the end time end_time = time.time() # Calculate the difference to get the execution time execution_time = end_time - start_time print(f'Execution time: {execution_time} seconds')
copy

Embora o uso de time.time() seja simples e eficaz para estimativas aproximadas, ele apresenta várias limitações:

  • Baixa resolução: a precisão de time.time() pode variar dependendo do sistema operacional, resultando em resultados imprecisos para operações pequenas;
  • Sobrecarga: inclui outros processos do sistema em execução em segundo plano, o que pode distorcer a medição;
  • Não repete: para medições mais precisas, geralmente é necessário executar o mesmo código várias vezes para obter um resultado médio, algo que time.time() não faz automaticamente.

Vantagens de Usar o timeit

O módulo timeit é uma ferramenta mais avançada, projetada para superar as limitações do time.time() e fornecer uma maneira confiável de medir o tempo de execução de pequenos trechos de código, frequentemente chamados de micro-benchmarking.

As principais vantagens do timeit são:

  • Alta precisão: o timeit utiliza time.perf_counter() internamente, um temporizador de alta resolução que inclui o tempo gasto durante o sono e espera por I/O, tornando-o mais preciso para intervalos curtos do que o time.time();

  • Repetição automática: o timeit executa automaticamente o código várias vezes e calcula o tempo médio de execução. Isso ajuda a mitigar os efeitos de processos em segundo plano, fornecendo uma medida mais confiável do desempenho do código;

  • Sobrecarga mínima: o timeit é projetado para rodar em um ambiente limpo, desabilitando temporariamente a coleta de lixo para garantir que as medições foquem no código sendo avaliado, sem interferência de operações de gerenciamento de memória.

1234567
import timeit # Code snippet to test code_snippet = 'result = [x**2 for x in range(1000000)]' # Running timeit to measure execution time iterations = 30 execution_time = timeit.timeit(code_snippet, number=iterations) print(f'Average Execution Time: {execution_time / iterations} seconds')
copy

Neste exemplo, timeit.timeit() executa o código especificado como uma string (variável code_snippet) 30 vezes (definido pelo parâmetro number) e retorna o tempo total de execução para todas as 30 execuções. Ao dividir o tempo total pelo número de iterações (30), é possível calcular o tempo médio de execução para uma única execução.

Escolhendo o Número de Iterações

A escolha do número de iterações depende da complexidade do código que está sendo avaliado e da precisão exigida nos resultados de tempo. Executar o código com diferentes quantidades de iterações permite avaliar a estabilidade dos resultados; se os tempos de execução forem consistentes, provavelmente foi encontrado um número de iterações ideal.

Para trechos de código muito rápidos (milissegundos ou menos), utilize 1000+ iterações para obter médias confiáveis. Para códigos com tempo moderado (alguns milissegundos a segundos), 100 a 500 iterações geralmente são suficientes. Para códigos de execução mais longa (vários segundos ou mais), 10 a 50 iterações costumam proporcionar um bom equilíbrio entre precisão e tempo gasto na avaliação de desempenho.

1. Qual função oferece alta precisão e executa automaticamente o código várias vezes para calcular o tempo médio de execução?

2. Por que o uso de time.time() para medição de desempenho pode ser menos confiável do que timeit.timeit()?

question mark

Qual função oferece alta precisão e executa automaticamente o código várias vezes para calcular o tempo médio de execução?

Select the correct answer

question mark

Por que o uso de time.time() para medição de desempenho pode ser menos confiável do que timeit.timeit()?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you explain how to use the timeit module with functions instead of code strings?

What are some best practices for benchmarking code performance in Python?

Can you provide more examples of using timeit for different types of code?

Awesome!

Completion rate improved to 7.69

bookNoções Básicas de Temporização e Benchmarking

Deslize para mostrar o menu

Como não estamos enfatizando a análise de complexidade de tempo neste curso, o foco será em métodos empíricos (práticos) para medir o desempenho real do código. Uma das formas mais simples de medir o desempenho de um trecho de código é utilizando a função embutida time.time().

Essa função retorna o tempo atual em segundos desde a época (o ponto de referência do sistema para o tempo). Chamando time.time() antes e depois de um trecho de código, é possível calcular a diferença para saber quanto tempo levou para executar.

123456789101112131415
import time # Record the start time start_time = time.time() # Code you want to measure result = [x**2 for x in range(1000000)] # Record the end time end_time = time.time() # Calculate the difference to get the execution time execution_time = end_time - start_time print(f'Execution time: {execution_time} seconds')
copy

Embora o uso de time.time() seja simples e eficaz para estimativas aproximadas, ele apresenta várias limitações:

  • Baixa resolução: a precisão de time.time() pode variar dependendo do sistema operacional, resultando em resultados imprecisos para operações pequenas;
  • Sobrecarga: inclui outros processos do sistema em execução em segundo plano, o que pode distorcer a medição;
  • Não repete: para medições mais precisas, geralmente é necessário executar o mesmo código várias vezes para obter um resultado médio, algo que time.time() não faz automaticamente.

Vantagens de Usar o timeit

O módulo timeit é uma ferramenta mais avançada, projetada para superar as limitações do time.time() e fornecer uma maneira confiável de medir o tempo de execução de pequenos trechos de código, frequentemente chamados de micro-benchmarking.

As principais vantagens do timeit são:

  • Alta precisão: o timeit utiliza time.perf_counter() internamente, um temporizador de alta resolução que inclui o tempo gasto durante o sono e espera por I/O, tornando-o mais preciso para intervalos curtos do que o time.time();

  • Repetição automática: o timeit executa automaticamente o código várias vezes e calcula o tempo médio de execução. Isso ajuda a mitigar os efeitos de processos em segundo plano, fornecendo uma medida mais confiável do desempenho do código;

  • Sobrecarga mínima: o timeit é projetado para rodar em um ambiente limpo, desabilitando temporariamente a coleta de lixo para garantir que as medições foquem no código sendo avaliado, sem interferência de operações de gerenciamento de memória.

1234567
import timeit # Code snippet to test code_snippet = 'result = [x**2 for x in range(1000000)]' # Running timeit to measure execution time iterations = 30 execution_time = timeit.timeit(code_snippet, number=iterations) print(f'Average Execution Time: {execution_time / iterations} seconds')
copy

Neste exemplo, timeit.timeit() executa o código especificado como uma string (variável code_snippet) 30 vezes (definido pelo parâmetro number) e retorna o tempo total de execução para todas as 30 execuções. Ao dividir o tempo total pelo número de iterações (30), é possível calcular o tempo médio de execução para uma única execução.

Escolhendo o Número de Iterações

A escolha do número de iterações depende da complexidade do código que está sendo avaliado e da precisão exigida nos resultados de tempo. Executar o código com diferentes quantidades de iterações permite avaliar a estabilidade dos resultados; se os tempos de execução forem consistentes, provavelmente foi encontrado um número de iterações ideal.

Para trechos de código muito rápidos (milissegundos ou menos), utilize 1000+ iterações para obter médias confiáveis. Para códigos com tempo moderado (alguns milissegundos a segundos), 100 a 500 iterações geralmente são suficientes. Para códigos de execução mais longa (vários segundos ou mais), 10 a 50 iterações costumam proporcionar um bom equilíbrio entre precisão e tempo gasto na avaliação de desempenho.

1. Qual função oferece alta precisão e executa automaticamente o código várias vezes para calcular o tempo médio de execução?

2. Por que o uso de time.time() para medição de desempenho pode ser menos confiável do que timeit.timeit()?

question mark

Qual função oferece alta precisão e executa automaticamente o código várias vezes para calcular o tempo médio de execução?

Select the correct answer

question mark

Por que o uso de time.time() para medição de desempenho pode ser menos confiável do que timeit.timeit()?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 2
some-alt