在我写的Python代码在同一个文件中的所有功能,过去,我可以使用下面的代码分析我的计划:我怎样才能剖析我的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
我已经添加在每个myApp
方法的前面的装饰do_profile
,但如果我运行kernprof.py
,所得.prof
文件是空
那么分析一个类的方法最简单的方法是什么?我真的很喜欢用装饰者和旗帜来开关这个开关。
EDIT1:我对这里最简单的解决方案非常感兴趣。找一个装饰者成为一个优雅的解决方案,但也许事情可以做得更容易。我不想做的是使用像cProfile's
配置文件profile.runctx('self.baz()', globals(), locals())
。处理很多类和方法时,这不是一个实际的解决方案。
你如何使用它?你能给出完整的工作例子吗? – 2017-11-17 01:43:13
@johnktejik:答案已包括工作示例。 – 2017-11-17 08:30:04
不,我得到一个错误,说DO_PROFILE没有定义。 – 2017-11-18 19:04:48