分析脚本中运行的库中的函数

时间:2015-09-04 08:27:34

标签: python profiling

我想分析特定函数export()中每一行所用的时间,该函数位于我的库的IO部分,因此具有路径mylib.io.export()。为了使用真实世界数据对其进行测试,我需要运行load_transform_export.py,其中或多或少包含以下代码:

import mylib

i_data = mylib.io.read(...)
t_data = mylib.utils.transform(i_data)
train, test = mylib.utils.split(t_data)
mylib.io.export(train, 'train.h5')
mylib.io.export(test, 'test.h5')

我已尝试将@profile添加到mylib.io.export()并使用kernprof -l -v load_transform_export.py运行脚本,尝试使用line_profiler。但是,它似乎无法注入库中的函数(例如,不是主脚本)。如何通过此设置分析函数中每行的使用时间?

修改

分析的输出应该是每行的,因此类似于this

Wrote profile results to primes.py.lprof
Timer unit: 1e-06 s

File: primes.py
Function: primes at line 2
Total time: 0.00019 s

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     2                                           @profile
     3                                           def primes(n): 
     4         1            2      2.0      1.1      if n==2:
     5                                                   return [2]
     6         1            1      1.0      0.5      elif n<2:
     7                                                   return []
     8         1            4      4.0      2.1      s=range(3,n+1,2)
     9         1           10     10.0      5.3      mroot = n ** 0.5
    10         1            2      2.0      1.1      half=(n+1)/2-1
    11         1            1      1.0      0.5      i=0
    12         1            1      1.0      0.5      m=3
    13         5            7      1.4      3.7      while m <= mroot:
    14         4            4      1.0      2.1          if s[i]:
    15         3            4      1.3      2.1              j=(m*m-3)/2
    16         3            4      1.3      2.1              s[j]=0
    17        31           31      1.0     16.3              while j<half:
    18        28           28      1.0     14.7                  s[j]=0
    19        28           29      1.0     15.3                  j+=m
    20         4            4      1.0      2.1          i=i+1
    21         4            4      1.0      2.1          m=2*i+3
    22        50           54      1.1     28.4      return [2]+[x for x in s if x]

0 个答案:

没有答案