Calculando o tempo de Execução de códigos em Python
Published: 2023-11-08 23:21:03

Você já teve curiosidade em saber o tempo de execução do seu código ou comparar qual método utilizado é mais rápido?

O objetivo deste post é compartilhar algumas formas de fazer isso usando Python.

### Biblioteca time
Utilizando a biblioteca time, você pode capturar o início e o fim da execução de um trecho de código para saber o tempo que ela levou.

```
import time

tempo_inicio = time.time()

for i in range(3):
    print(i)

tempo_fim = time.time()

print(f('Tempo de execução do trecho de código {str(tempo_fim - tempo_inicio)}s')
```


![Imagem exibindo a saída do trecho de código acima](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tw20d0e2x0pwlyaup4zl.png)

### Funções Mágicas do iPython
No iPython você pode usar %%timeit no início da célula para capturar o tempo de execução de toda a célula ou o %timeit para apenas uma única linha:
```
%timeit sum(range(5000))
```

![Imagem exibindo a saída do trecho de código acima](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0v9occc1s5v21xo25j38.png)

O que essa função faz é automaticamente utilizar múltiplas execuções do código e retornar o tempo médio de execução.

Essa função também aceita alguns argumentos, como por exemplo -n que define o número de vezes que o código deve ser executado, e -r que define o número de repetições com a quantidade de loops passada no argumento “-n”.

```
%%timeit -r2 -n2
for i in range(3):
  print(i)`
```

![Imagem exibindo a saída do trecho de código acima](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2bh34911sz3tl5vg5ety.png)

Também é possível armazenar o resultado em uma variável (utilizando o argumento -o) para visualizar melhor os resultados:

```
tempo_exec = %timeit -o -r2 -n2 my_list = [i for i in range(3)]
```

Como por exemplo, ver todos os tempos de execução:

```
tempo_exec.timings
```

![Imagem exibindo a saída do trecho de código acima](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/talnpjdqjpj42yk637tr.png)

Outra opção é a função mágica %time, que verifica o tempo de execução uma única vez. Ela é preferível em alguns casos, como quando se quer descobrir o tempo de execução para uma função de ordenação. Nesse caso, como uma lista já ordenada demora um tempo menor do que uma lista não ordenada, usar %timeit pode distorcer os resultados.

```
import random
random_list = [random.random() for i in range(100000)]
%time random_list.sort()
```
Por outro lado, %timeit além de executar o cálculo várias vezes retornando a média para tentar contornar a influência de outras tarefas do sistema durante a execução, também realiza outras operações por baixo dos panos, como desabilitar o garbage collector (responsável pela limpeza de objetos não utilizados), retornando um tempo de execução menor e mais acurado.

![Imagem exibindo a saída do trecho de código acima](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/59fc9unbjhwtn18nw1o1.png)

### Para saber mais:
Documentação iPython. Disponível em: https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-time

Jake VanderPlas. Python Data Science Handbook. Disponível em: https://jakevdp.github.io/PythonDataScienceHandbook/01.07-timing-and-profiling.html