Как в Python отключить сборщик мусора (garbage collector)

«Как в Python отключить сборщик мусора (garbage collector)» — вопрос из категории Python, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, в Python можно временно отключить автоматический сборщик мусора (Garbage Collector, GC) с помощью встроенного модуля gc. Это может быть полезно для оптимизации производительности в критически важных участках кода.

Основной механизм

Для управления GC используются функции gc.disable() и gc.enable().

import gc

# Проверяем, включен ли GC
if gc.isenabled():
    print("GC включен. Отключаем...")
    gc.disable() # Отключаем сборщик мусора

print(f"Статус GC после отключения: {gc.isenabled()}")

# --- Начало критического участка кода ---
# Здесь выполняются операции, где задержки от GC нежелательны
# Например, интенсивные вычисления в цикле
# --- Конец критического участка кода ---

gc.enable() # Обязательно включаем GC обратно
print(f"Статус GC после включения: {gc.isenabled()}")

Ключевые моменты и риски

  1. Подсчёт ссылок продолжает работать. Отключение gc влияет только на механизм обнаружения и очистки циклических ссылок. Объекты, на которые не осталось ссылок, по-прежнему будут немедленно удаляться благодаря подсчёту ссылок.
  2. Риск утечки памяти. Если в коде во время отключенного GC образуются циклические ссылки (например, obj1.attr = obj2, а obj2.attr = obj1), занимаемая ими память не будет освобождена до следующего принудительного или автоматического запуска GC.
  3. Кратковременное использование. Отключать GC следует только на короткие, хорошо контролируемые промежутки времени, чтобы минимизировать риск накопления мусора.