Search code examples
pythoncprofile

cProfile inside a nested function


I am trying to profile a nested function using cProfile.run. I understand that perhaps cProfile isn't running at the same scope as where I am calling it, but I'm not quite sure what the idiomatic way to achieve this is. Here's an MVCE:

def foo():
    def bar():
        # do something here
        return 1
    cProfile.run('bar()')

Gives the error:

NameError: name 'bar' is not defined

Solution

  • Use cProfile.runctx:

    def foo():
        def bar():
            # do something here
            return 1
        cProfile.runctx('bar()', None, locals=locals())