开发者

Python profiler usage with objects

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

i开发者_如何学运维mport 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()
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜