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)