+1 on a C API for enabling and disabling GC. I have several instances where I create a large number of objects non-cyclic objects where I see huge GC overhead (30+ seconds with gc enabled, 0.15 seconds when disabled).
+1000 to fixing the garbage collector to be smart enough to self-regulate itself better. In the mean time, I use the following context manager to deal with the hotspots as I find them: class gcdisabled(object): ''' Conext manager to temporarily disable Python's cyclic garbage collector. The primary use is to avoid thrashing while allocating large numbers of non-cyclic objects due to an overly aggressive garbage collector behavior. Will disable GC if it is enabled upon entry and renable upon exit: >>> gc.isenabled() True >>> with gcdisabled(): ... print gc.isenabled() False >>> print gc.isenabled() True Will not reenable if GC was disabled upon entry: >>> gc.disable() >>> gc.isenabled() False >>> with gcdisabled(): ... gc.isenabled() False >>> gc.isenabled() False ''' def __init__(self): self.isenabled = gc.isenabled() def __enter__(self): gc.disable() def __exit__(self, type, value, traceback): if self.isenabled: gc.enable()
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com