Імпорти 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
Time (import outside loop): 0.0786 sec
Time (import inside loop): 0.2162 sec
Import inside loop is 3x slower than importing outside.

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


Дивіться схожі статті за категоріями: Python