我正在尝试将Robert Kern 的 python line_profiler用于一些面向对象的代码,但我无法获得所需的输出。我的对象是以下形式:
class myObj:
def __init__(self,inputs):
#process inputs
@profile
def run(self):
for t in range(self.timesteps):
self.update()
@profile
def update(self):
self.A += self.dA()
self.B += self.dB()
@profile
def dA(self):
#process data
@profile
def dB(self):
#process data
我想使用@profile
装饰器对每个方法进行行分析,但是当我使用以下命令在 iPython 环境中运行分析器时:
test = myObj()
%lprun -f test.run test.run()
我得到以下信息:
Timer unit: 1e-06 s
Total time: 0 s
File: /Users/-----/anaconda3/lib/python3.7/site-packages/line_profiler.py
Function: wrapper at line 111
Line # Hits Time Per Hit % Time Line Contents
==============================================================
111 @functools.wraps(func)
112 def wrapper(*args, **kwds):
113 self.enable_by_count()
114 try:
115 result = func(*args, **kwds)
116 finally:
117 self.disable_by_count()
118 return result
我在没有@profile
装饰器的情况下尝试过它,它只是告诉我所有的时间都花在了update
方法上,这很清楚。