带有面向对象代码的Python line_profiler

时间:2019-07-25 20:28:09

标签: python profiling line-profiler

我正在尝试将python line_profiler by Robert Kern用于一些面向对象的代码,但是我无法获得所需的输出。我的对象具有以下形式:


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/goldalex/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方法中,这很清楚。

0 个答案:

没有答案