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