Return value while using cProfile

后端 未结 5 549
难免孤独
难免孤独 2020-12-13 06:59

I\'m trying to profile an instance method, so I\'ve done something like:

import cProfile

class Test():

    def __init__(self):
        pass

    def method         


        
5条回答
  •  鱼传尺愫
    2020-12-13 07:47

    I created a decorator:

    import cProfile
    import functools
    import pstats
    
    def profile(func):
    
        @functools.wraps(func)
        def inner(*args, **kwargs):
            profiler = cProfile.Profile()
            profiler.enable()
            try:
                retval = func(*args, **kwargs)
            finally:
                profiler.disable()
                with open('profile.out', 'w') as profile_file:
                    stats = pstats.Stats(profiler, stream=profile_file)
                    stats.print_stats()
            return retval
    
        return inner
    

    Decorate your function or method with it:

    @profile
    def somefunc(...):
       ...
    

    Now that function will be profiled.

    Alternatively, if you'd like the raw, unprocessed profile data (e.g. because you want to run the excellent graphical viewer RunSnakeRun on it), then:

    import cProfile
    import functools
    import pstats
    
    def profile(func):
    
        @functools.wraps(func)
        def inner(*args, **kwargs):
            profiler = cProfile.Profile()
            profiler.enable()
            try:
                retval = func(*args, **kwargs)
            finally:
                profiler.disable()
                profiler.dump_stats('profile.out')
            return retval
    
        return inner
    

    This is a minor improvement on several of the other answers on this page.

提交回复
热议问题