Импорты внутри цикла в Python в 3 раза медленнее, чем импорты на уровне файла

Этот скрипт-бенчмарк тестирует импорты внутри цикла вместо импортов вне цикла. Результаты показывают, что импорты внутри цикла примерно в 3 раза медленнее, чем импорты на уровне файла.

import_benchmark.py
import time
import sys

def benchmark_import_outside():
    """Тестирование производительности импорта модуля math вне цикла."""
    import math  # Импорт один раз вне цикла

    start = time.time()
    for _ in range(1_000_000):
        x = math.sqrt(100)  # Использование импортированного модуля
    end = time.time()

    return end - start

def benchmark_import_inside():
    """Тестирование производительности импорта модуля math внутри цикла."""
    start = time.time()
    for _ in range(1_000_000):
        import math  # Импорт внутри цикла (плохая практика)
        x = math.sqrt(100)
    end = time.time()

    return end - start

def clear_math_from_cache():
    """Очистка модуля math из sys.modules для принудительной перезагрузки."""
    if 'math' in sys.modules:
        del sys.modules['math']

def main():
    # Убедиться, что math не кэширован перед бенчмаркингом
    clear_math_from_cache()

    # Бенчмарк импорта вне цикла
    time_outside = benchmark_import_outside()
    print(f"Время (импорт вне цикла): {time_outside:.4f} сек")

    # Очистить math из кэша для честного сравнения
    clear_math_from_cache()

    # Бенчмарк импорта внутри цикла
    time_inside = benchmark_import_inside()
    print(f"Время (импорт внутри цикла): {time_inside:.4f} сек")

    # Вычислить и вывести разницу в производительности
    ratio = time_inside / time_outside
    print(f"Импорт внутри цикла в {ratio:.0f}x медленнее, чем импорт вне цикла.")

if __name__ == "__main__":
    main()

Результаты

benchmark_output.txt
Время (импорт вне цикла): 0.0786 сек
Время (импорт внутри цикла): 0.2162 сек
Импорт внутри цикла в 3x медленнее, чем импорт вне цикла.

на Core i7-6700, с Python 3.12.3 на


Check out similar posts by category: Python