我开始使用line_profiler
在Python中寻找瓶颈。现在,我正在通过运行
kernprof -l -v myFile.py
但是,时间单位似乎为1e-6
,这会导致132329040
等输出结果。如何增加时间间隔以使输出对于更大的时间增量更具可读性?
答案 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