When the slow function is found, it is sometimes necessary to do more profiling work that tests just a part of the program. This is done by manually instrumenting a part of the code in a speed test.
For instance, the cProfile module can be used in a form of decorator, as in following example:
import timeimport tempfileimport cProfileimport pstatsdef profile(column='time', list=3): def parametrized_decorator(function): def decorated(*args, **kw): s = tempfile.mktemp() profiler = cProfile.Profile() profiler.runcall(function, *args, **kw) profiler.dump_stats(s) p = pstats.Stats(s) print("=" * 5, f"{function.__name__}() profile", "=" * 5) p.sort_stats(column).print_stats(list) return decorated return parametrized_decoratordef ...