Python探查器与对象的使用

时间:2010-06-29 16:54:52

标签: python profiler

我有一个关于探查器用法的具体问题。我是python编程的新手 我试图分析一个我想作为类方法调用的函数,类似这样的

import profile

class Class:
    def doSomething():
        do here ..

    def callMethod():
        self.doSomething()

而不是我想要使用

    profile.run(self.doSomething())

profile.run期望其中的字符串,我得到错误

TypeError: exec: arg 1 must be a string, file, or code object

有人可以帮忙吗?

谢谢

2 个答案:

答案 0 :(得分:10)

固定!!!

我使用cProfile模块代替配置文件,根据python文档的开销要小得多

参考:http://docs.python.org/library/profile.html#introduction-to-the-profilers

使用cProfiler,实际上可以使用runctx模块传递本地和全局参数 所以对于同样的问题,我做了以下几点:

import cProfile
cProfile.runctx('self.doSomething()',globals(),locals())

它有效:)

另外,如果你有更多的参数传递你可以喜欢

import cProfile
cProfile.runctx('self.doSomething(x,y,z)',globals(),locals())

感谢您的帮助

答案 1 :(得分:3)

你需要解决各种不精确问题(缺少self,说当你看不到classmethod时,你正在使用类方法,没有从object继承,...然后通过给它一个字符串来使profile满意 - 并且必须使实例的名称全局可见,以便profile实际上可以使用该字符串。例如:

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()