Link Search Menu Expand Document
El Libro De Python (24.95 €) 39.95 €

Benchmark con timeit

En este ejemplo vemos como medir la eficiencia de tu código Python. Existen dos métricas muy importantes que reflejan la eficiencia de nuestro código:

  • ⚡ Velocidad: El tiempo que tarda en ejecutarse, medido en segundos.
  • 📝 Memoria: La memoria RAM que consume, medido en MB.

Python no es el lenguaje más eficiente, pero existen formas de mejorarlo. Siempre que queramos optimizar nuestro código, es necesario medir estas métricas y comparar el resultado antes y después.

Nos centraremos en la primera, la velocidad. Ahora supongamos que tenemos dos funciones que realizan lo mismo:

  • fun_a: Multiplica una lista por un número usando list comprehension.
  • fun_b: Multiplica una lista por un número usando numpy.

Ambas realizan la misma tarea y no estamos seguros de cual usar. Podemos por tanto medir la velocidad de ambas y decidirnos por la más rápida.

from timeit import timeit
import numpy as np

def fun_a(data, scalar):
    return [x * scalar for x in data]

def fun_b(data, scalar):
    return data * scalar

En muchas ocasiones los problemas de eficiencia solo se notan cuando trabajamos con muchos datos. Para ello vamos a definir una lista con un millón de elementos.

Después medimos con timeit el tiempo que tarda en ejecutarse cada una. Promediamos 10 ejecuciones. Podemos ver que func_b es mucho más rápida.

lista = list(range(10**6))
array = np.array(lista)

t_a = timeit(lambda: fun_a(lista, 5.55), number=10)
print(f"fun_a: {t_a / 10:.4f} segundos")

t_b = timeit(lambda: fun_b(array, 5.55), number=10)
print(f"fun_b: {t_b / 10:.4f} segundos")

# fun_a: 0.0360 segundos
# fun_b; 0.0010 segundos

Siempre que quieras optimizar un código empieza por aquí. Primero mide lo que tarda para entender el punto de partida. Y después intenta optimizar.

Otro apunte importante es el consumo de memoria. Tal vez una solución sea más rápida, pero consuma más memoria. En este caso, tendrás que decidir qué es lo importante para tu programa.

✏️ Ejercicios:

  • Encuentra otra dos formas de realizar la misma tarea en Python donde una de ellas sea más rápida.
  • Explora como medir el consumo de memoria. Esta es junto con la velocidad otra métrica importante.