2

我有一个测试套件和它正在测试的代码。如果我放在from memory_profiler import profile适当文件的顶部,用 装饰我想要配置的函数@profile,并用 以标准方式运行python TestThing.py,我会得到很好的逐行结果。

但是 line_profiler 并没有以这种方式出现在一个包中,我能够用它来分析任何东西的唯一方法是使用kernprof -l -v thing.py. 如果我在单元测试中使用它,则不会运行任何测试(真的不足为奇),也不会生成任何结果。如何以类似于 memory_profiler 的方式对我的测试和它们使用的代码进行时间分析?

4

2 回答 2

1

当然,您可以导入 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 中。

或者,您可以像装饰器一样包装 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 _
于 2017-10-03T08:49:11.800 回答
0

请检查pytest-line-profiler

您只需要用要分析的功能装饰(标记)一个或多个测试,并在最后得到逐行报告。

PS:我是这个插件的作者,非常感谢您的反馈。

于 2021-05-19T04:19:27.033 回答