过去,我在同一个文件中编写了包含所有函数的 python 代码,我可以使用以下代码分析我的程序:
这是我写的一个装饰器:
def do_profile(cond):
def resdec(f):
if not cond:
return f
return profile(f)
return resdec
这就是我使用它的方式:
@do_profile(DO_PROFILE)
def my_func():
return 1
kernprof.py
然后我会在我的脚本上调用:
kernprof.py -l my_program.py
与此同时,我对 OOP 更加熟悉,我将我的程序重写为许多类,现在程序开始如下:
if __name__ == "__main__":
my_app = myApp()
my_app.run()
myApp
是一个也与其他类进行大量通信的类:
class myApp():
@do_profile(DO_PROFILE)
def foo_method(self, arg1):
pass
我已经do_profile
在每个方法前面添加了装饰器myApp
,但是如果我运行kernprof.py
,结果.prof
文件是空的
那么分析类方法的最简单方法是什么?我真的很想用装饰器和标志打开/关闭它。
EDIT1:我对这里最简单的解决方案非常感兴趣。找到一个装饰器是一个优雅的解决方案,但也许事情可以做得更容易。我不想做的是使用cProfile's
profile之类的东西profile.runctx('self.baz()', globals(), locals())
。在处理许多类和方法时,这不是一个实用的解决方案。