我有一个测试套件和正在测试的代码。如果我将@profile
放在相应文件的顶部,装饰我希望使用python TestThing.py
进行分析的函数,并使用kernprof -l -v thing.py
的标准方式运行,我会逐行完成结果
但是line_profiler并没有以这种方式进入包中,而且我能用它来分析任何内容的唯一方法是使用{{1}}。如果我在我的单元测试中使用它,则不会运行任何测试(不足为奇,真的如此),并且不会生成任何结果。如何以类似于memory_profiler的方式对我的测试及其使用的代码进行时间分析?
答案 0 :(得分:0)
当然,你可以import line_profiler:
import line_profiler
profiler = line_profiler.LineProfiler()
@profiler
def foo():
for i in range(10):
print(i)
foo()
profiler.dump_stats('foo.lprof')
结果存储在foo.lprof。
或者,你可以像decorator一样包装memory_profiler,调用后打印结果:
def profile_and_show(func):
profiler = line_profiler.LineProfiler(func)
def _(*args, **kwargs):
try:
return func(*args, **kwargs)
finally:
lstats = profiler.get_stats()
line_profiler.show_text(lstats.timings, lstats.unit)
return _
答案 1 :(得分:0)