我有一个关于探查器用法的具体问题。我是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
有人可以帮忙吗?
谢谢
答案 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()