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
Wenn dieser Beitrag dir geholfen hat, erwäge, mir einen Kaffee zu spendieren oder per PayPal zu spenden, um die Recherche und Veröffentlichung neuer Beiträge auf TechOverflow zu unterstützen