8

我已经开始使用line_profiler. 现在,我正在通过运行来做到这一点

kernprof -l -v myFile.py

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

4

4 回答 4

4

这是迄今为止仅通过 Jupyter line magic 提供的功能,如此处所述。它可以通过“-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中所述。

于 2019-05-29T09:11:56.513 回答
2

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

profiler.print_stats(output_unit=1e-03)

output_unit=1e-03,控制台输出“Timer unit: 0.001 s” output_unit=1,控制台输出“Timer unit: 1 s”

于 2019-04-11T15:38:07.840 回答
1

在 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')
于 2019-11-14T04:01:16.283 回答
-2

使用“ms”显示:

编辑line_profiler.py -> show_func -> 找到for lineno, nhits, time in timings: 这一行 -> 更改timetime * 10-03

于 2017-05-17T00:54:42.187 回答