Created
October 4, 2010 13:09
-
-
Save kljensen/609658 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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