Las importaciones dentro del bucle en Python son 3 veces más lentas que las importaciones a nivel de archivo

Este script de benchmark prueba las importaciones dentro del bucle en lugar de importaciones externas. Los resultados muestran que las importaciones dentro del bucle son aproximadamente 3 veces más lentas que las importaciones a nivel de archivo.

import_benchmark.py
import time
import sys

def benchmark_import_outside():
    """Mide el rendimiento de importar el módulo math fuera del bucle."""
    import math  # Importar una vez fuera del bucle

    start = time.time()
    for _ in range(1_000_000):
        x = math.sqrt(100)  # Usar el módulo importado
    end = time.time()

    return end - start

def benchmark_import_inside():
    """Mide el rendimiento de importar el módulo math dentro del bucle."""
    start = time.time()
    for _ in range(1_000_000):
        import math  # Importar dentro del bucle (mala práctica)
        x = math.sqrt(100)
    end = time.time()

    return end - start

def clear_math_from_cache():
    """Elimina el módulo math de sys.modules para forzar su recarga."""
    if 'math' in sys.modules:
        del sys.modules['math']

def main():
    # Asegurarse de que math no esté en caché antes del benchmark
    clear_math_from_cache()

    # Benchmark de importación fuera del bucle
    time_outside = benchmark_import_outside()
    print(f"Time (import outside loop): {time_outside:.4f} sec")

    # Limpiar math de la caché para asegurar una comparación justa
    clear_math_from_cache()

    # Benchmark de importación dentro del bucle
    time_inside = benchmark_import_inside()
    print(f"Time (import inside loop): {time_inside:.4f} sec")

    # Calcular e imprimir la diferencia de rendimiento
    ratio = time_inside / time_outside
    print(f"Import inside loop is {ratio:.0f}x slower than importing outside.")

if __name__ == "__main__":
    main()

Resultados

benchmark_output.txt
Time (import outside loop): 0.0786 sec
Time (import inside loop): 0.2162 sec
Import inside loop is 3x slower than importing outside.

en Core i7-6700, con Python 3.12.3 en


Echa un vistazo a artículos similares por categoría: Python