Les imports Python à l'intérieur d'une boucle sont 3 fois plus lents que les imports au niveau du fichier

Ce script de benchmark teste les imports à l’intérieur d’une boucle par opposition aux imports externes. Les résultats montrent que les imports à l’intérieur d’une boucle sont environ 3 fois plus lents que les imports au niveau du fichier.

import_benchmark.py
import time
import sys

def benchmark_import_outside():
    """Benchmark : importer le module math en dehors de la boucle."""
    import math  # Importer une fois en dehors de la boucle

    start = time.time()
    for _ in range(1_000_000):
        x = math.sqrt(100)  # Utiliser le module importé
    end = time.time()

    return end - start

def benchmark_import_inside():
    """Benchmark : importer le module math à l'intérieur de la boucle."""
    start = time.time()
    for _ in range(1_000_000):
        import math  # Importer à l'intérieur de la boucle (mauvaise pratique)
        x = math.sqrt(100)
    end = time.time()

    return end - start

def clear_math_from_cache():
    """Vider le module math de sys.modules pour forcer le rechargement."""
    if 'math' in sys.modules:
        del sys.modules['math']

def main():
    # S'assurer que math n'est pas en cache avant le benchmark
    clear_math_from_cache()

    # Benchmark import externe
    time_outside = benchmark_import_outside()
    print(f"Temps (import hors boucle) : {time_outside:.4f} sec")

    # Vider math du cache pour une comparaison équitable
    clear_math_from_cache()

    # Benchmark import interne
    time_inside = benchmark_import_inside()
    print(f"Temps (import dans la boucle) : {time_inside:.4f} sec")

    # Calculer et afficher la différence de performance
    ratio = time_inside / time_outside
    print(f"L'import dans la boucle est {ratio:.0f}x plus lent que l'import externe.")

if __name__ == "__main__":
    main()

Résultats

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.

sur Core i7-6700, avec Python 3.12.3 sur


Check out similar posts by category: Python