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 ...

Get Expert Python Programming - Third Edition now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.