You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
923 B
31 lines
923 B
from hotshot import Profile
|
|
from hotshot.stats import load as loadStats
|
|
from os import unlink
|
|
|
|
def runProfiler(func, args=tuple(), kw={}, verbose=True, nb_func=25, sort_by=('cumulative', 'calls')):
|
|
profile_filename = "/tmp/profiler"
|
|
prof = Profile(profile_filename)
|
|
try:
|
|
if verbose:
|
|
print "[+] Run profiler"
|
|
result = prof.runcall(func, *args, **kw)
|
|
prof.close()
|
|
if verbose:
|
|
print "[+] Stop profiler"
|
|
print "[+] Process data..."
|
|
stat = loadStats(profile_filename)
|
|
if verbose:
|
|
print "[+] Strip..."
|
|
stat.strip_dirs()
|
|
if verbose:
|
|
print "[+] Sort data..."
|
|
stat.sort_stats(*sort_by)
|
|
if verbose:
|
|
print
|
|
print "[+] Display statistics"
|
|
print
|
|
stat.print_stats(nb_func)
|
|
return result
|
|
finally:
|
|
unlink(profile_filename)
|
|
|
|
|