找到代码中最耗时部分的可靠方法是什么? [英] What is the reliable method to find most time consuming part of the code?

查看:30
本文介绍了找到代码中最耗时部分的可靠方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

沿着我的源代码,我尝试在 Python 中捕获和测量一个段的时间释放.如何以方便且精确的方式测量该段通过时间?

解决方案

使用分析器.

Python 的

更新:profilestatspyprof2calltree 已经合并,所以它们现在也支持 Python 3.x.

Along my source code I try to capture and measure the time release of a segment in Python. How can I measure that segment pass time in a convenient way with good precision?

解决方案

Use a profiler.

Python's cProfile is included in the standard libary.

For an even more convenient way, use the package profilestats. Then you can use a decorator to just decorate the functions you want to profile:

from profilestats import profile

@profile
def my_function(args, etc):
    pass

This will cause a summary like this to be printed on STDOUT:

         6 function calls in 0.026 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.026    0.026 some_code.py:3(some_func)
        2    0.019    0.010    0.026    0.013 some_code.py:9(expensive_func)
        2    0.007    0.003    0.007    0.003 {range}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

The much more useful info however is in the cachegrind.out.profilestats file generated. You can open this file with a tools that can visualize cachegrind statistics, for example RunSnakeRun and get nice, easy (or easier) to read visualizations of your call stack like this:

Update: Both pull requests for profilestats and pyprof2calltree have been merged, so they now support Python 3.x as well.

这篇关于找到代码中最耗时部分的可靠方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆