Skip to content

Instantly share code, notes, and snippets.

@kljensen
Created October 4, 2010 13:09
Show Gist options
  • Save kljensen/609658 to your computer and use it in GitHub Desktop.
Save kljensen/609658 to your computer and use it in GitHub Desktop.
def report_memory_leaked(f):
""" Counts objects allocated in memory before and after the
decorated function and reports the results. If you decorate
a function like
@report_memory_leaked
def myfunc():
pass # do stuff
It will report objects by type that were leaked or created.
"""
from collections import defaultdict
from gc import get_objects
import logging
def obj_counting_wrapper(*args, **kwargs):
before=defaultdict(int)
for i in get_objects():before[type(i)]+=1
retval = f(*args, **kwargs)
after=defaultdict(int)
for i in get_objects():after[type(i)]+=1
leaked_or_returned = [(k,after[k]-before[k]) for k in after if after[k]-before[k]]
if leaked_or_returned:
logging.debug('Leaked or returned:\n%r' % leaked_or_returned)
return retval
return obj_counting_wrapper
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment