4

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
OneRaynyDay
  • 3,658
  • 2
  • 23
  • 56

2 Answers2

3

Use cProfile.runctx:

def foo():
    def bar():
        # do something here
        return 1
    cProfile.runctx('bar()', None, locals=locals())
MoxieBall
  • 1,907
  • 7
  • 23
0

Using cProfile.run

def foo():
    def bar():
        # do something here
        return 1
    cProfile.run(bar.__code__)
sandes
  • 1,917
  • 17
  • 28