import contextlib import gc import threading _times_disabled = 0 gc_lock = threading.Lock() @contextlib.contextmanager def no_gc(): global _times_disabled with gc_lock: if _times_disabled == 0: gc.disable() _times_disabled += 1 try: yield finally: with gc_lock: _times_disabled -= 1 if _times_disabled == 0: gc.enable()