I have a specific question regarding the usage of profiler. I am new to python programming I am trying to profile a function which I want to invoke as a class method, something like this
import profile
class Class:
    def doSomething():
        do here ..
    def callMethod():
        self.doSomething()
instead of this I want to use
    profile.run(self.doSomething())
but the profile.run expects the string inside it and I get error
TypeError: exec: arg 1 must be a string, file, or code object
Can somebody please help?
Thank you
Fixed!!!
Instead of profile, I used cProfile module that as per the python docs has much lesser overhead
Ref : http://docs.python.org/library/profile.html#introduction-to-the-profilers
with cProfiler, one can actually pass the local and global params using the runctx module so for the same problem, I did the following:
import cProfile
cProfile.runctx('self.doSomething()',globals(),locals())
and it worked :)
also, if you have more params to pass you can like
import cProfile
cProfile.runctx('self.doSomething(x,y,z)',globals(),locals())
Thanks for all help
You need to fix various imprecisions (missing self, saying you're using class methods when there's no classmethod in sight, failing to inherit from object, ...) then make profile happy by giving it a string as it wants -- and the name of the instance must be made globally visible so that profile can actually use that string.  For example:
import profile
import time
class Class(object):
  def doSomething(self):
      time.sleep(0.1)
  def callMethod(self):
      global _o
      _o = self
      profile.run('_o.doSomething()')
o = Class()
o.callMethod()
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With