Edit File: profiler.py
from profile import Profile from os import unlink from io import StringIO import pstats def calibrate(n): """ https://docs.python.org/3/library/profile.html#calibration """ if n > 0: pr = Profile() magics = [] for i in range(n): magics.append(pr.calibrate(10000)) return sum(magics) / n def runProfiler(logger, func, args=tuple(), kw={}, verbose=True, nb_func=25, sort_by=('time',), nb_cal=0): """ Run a function in a profiler and then display the functions sorted by time. """ profile_filename = "/tmp/profiler" prof = Profile(bias=calibrate(nb_cal)) try: logger.warning("Run profiler") result = prof.runcall(func, *args, **kw) logger.error("Profiler: Process data...") prof.dump_stats(profile_filename) stat = pstats.Stats(prof) stat.strip_dirs() stat.sort_stats(*sort_by) logger.error("Profiler: Result:") log = StringIO() stat.stream = log stat.print_stats(nb_func) log.seek(0) for line in log: logger.error(line.rstrip()) return result finally: unlink(profile_filename)