使用Kernprof更改时间单位

时间:2015-02-08 18:55:12

标签: python profiling line-profiler

我开始使用line_profiler在Python中寻找瓶颈。现在,我正在通过运行

来做到这一点
kernprof -l -v myFile.py

但是,时间单位似乎为1e-6,这会导致132329040等输出结果。如何增加时间间隔以使输出对于更大的时间增量更具可读性?

4 个答案:

答案 0 :(得分:1)

到目前为止,这是仅通过Jupyter线魔术出现的功能,如here所述。可以通过“ -u”标志,然后是计时器单位(以秒为单位)进行访问。这是一个示例用法:

def m():
  return [0]*10**8

%lprun -u 1e-3 -f m m()

以毫秒为单位显示输出的时间:

Out:
Timer unit: 0.001 s

Total time: 0.363548 s
File: 
Function: m at line 1

Line # Hits Time Per Hit % Time Line Contents
==============================================================
1 def m():
2 1 363.5 363.5 100.0 return [0]*10**8

PR中的记录。

答案 1 :(得分:0)

我通过阅读LineProfiler源代码找到了解决方案。 您可以使用以下参数“ output_unit”来更改时间单位。

profiler.print_stats(output_unit=1e-03)

output_unit = 1e-03,控制台将输出“计时器单位:0.001秒” output_unit = 1,控制台将输出“ Timer unit:1 s”

答案 2 :(得分:0)

在show_func函数中;在第202行附近:

if output_unit is None:
    output_unit = unit

将其更改为:

if output_unit is None:
    output_unit = unit*1000000

第二,在函数show_text中;在第254行附近:

if output_unit is not None:
    stream.write('Timer unit: %g s\n\n' % output_unit)
else:
    stream.write('Timer unit: %g s\n\n' % unit)

将其更改为:

if output_unit is not None:
    stream.write('Timer unit: %g s\n\n' % output_unit)
else:
    stream.write('Timer unit: %g s\n\n' % (unit*1000000))

在两个地方使用相同的因子。

在使用行命令运行line_profiler而不是ipython / jupyter时,我进行了上述更改。

输出文件如下所示。时间单位更具可读性!

executed
Wrote profile results to test.py.lprof
Timer unit: 0.1 s

Total time: 1.00024 s
File: test.py
Function: testfunc at line 5

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     5                                           @profile
     6                                           def testfunc():
     7         1         10.0     10.0    100.0      time.sleep(1)
     8         1          0.0      0.0      0.0      print('executed')

答案 3 :(得分:-1)

使用“ms”显示:

修改let presentationStartTime = CMTimeMakeWithSeconds(CACurrentMediaTime(), 240) assetWriter.startWriting() assetWriter.startSession(atSourceTime: presentationStartTime) - > show_func - >找到line_profiler.py这一行 - >将for lineno, nhits, time in timings:更改为time