Python-Imports in inneren Schleifen sind 3x langsamer als Datei-Level-Imports

Dieses Benchmark-Skript testet Imports in inneren Schleifen statt außerhalb. Die Ergebnisse zeigen, dass Imports in inneren Schleifen etwa 3x langsamer sind als Datei-Level-Imports.

import_benchmark.py
import time
import sys

def benchmark_import_outside():
    """Benchmark: math-Modul außerhalb der Schleife importieren."""
    import math  # Einmal außerhalb der Schleife importieren

    start = time.time()
    for _ in range(1_000_000):
        x = math.sqrt(100)  # Importiertes Modul verwenden
    end = time.time()

    return end - start

def benchmark_import_inside():
    """Benchmark: math-Modul innerhalb der Schleife importieren."""
    start = time.time()
    for _ in range(1_000_000):
        import math  # Innerhalb der Schleife importieren (schlechte Praxis)
        x = math.sqrt(100)
    end = time.time()

    return end - start

def clear_math_from_cache():
    """math-Modul aus sys.modules entfernen, um Neuladen zu erzwingen."""
    if 'math' in sys.modules:
        del sys.modules['math']

def main():
    # Sicherstellen, dass math vor dem Benchmark nicht gecacht ist
    clear_math_from_cache()

    # Benchmark: Import außerhalb
    time_outside = benchmark_import_outside()
    print(f"Time (import outside loop): {time_outside:.4f} sec")

    # math aus Cache entfernen, für fairen Vergleich
    clear_math_from_cache()

    # Benchmark: Import innerhalb
    time_inside = benchmark_import_inside()
    print(f"Time (import inside loop): {time_inside:.4f} sec")

    # Performance-Unterschied berechnen und ausgeben
    ratio = time_inside / time_outside
    print(f"Import inside loop is {ratio:.0f}x slower than importing outside.")

if __name__ == "__main__":
    main()

Ergebnisse

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.

auf Core i7-6700, mit Python 3.12.3 auf


Ähnliche Beiträge nach Kategorie: Python