今天刚看到ipython的一个函数执行时间的分析器,非常好用,记录一下。
安装模块
pip install line_profiler
导入模块
%load_ext line_profiler
例子
先定义一个函数:
def sum_of_lists(n):
total =0
for i in range(5):
l = [j ^ (j >> i) for j in range(n)]
total += sum(l)
return tatal
使用line_profiler分析函数执行时间
%lprun -f sum_of_lists sum_of_lists(5000)
Timer unit: 2.84444e-07 s
Total time: 0.00461681 s
File: <ipython-input-40-ce32f0c125bd>
Function: sum_of_lists at line 1
Line # Hits Time Per Hit % Time Line Contents
==============================================================
1 def sum_of_lists(n):
2 1 5.0 5.0 0.0 total =0
3 6 11.0 1.8 0.1 for i in range(5):
4 5 15685.0 3137.0 96.6 l = [j ^ (j>>i) for j in range(n) ]
5 5 529.0 105.8 3.3 total += sum(l)
6 1 1.0 1.0 0.0 return total
ok,很明显发现绝大部分的时间都发在第4行代码 l = [j ^ (j>>i) for j in range(n) ] 上了。
pycharm中自带了性能分析工具
测试函数如下:
微信图片_20180716151817.png
在run菜单下选择 profile your_file_name
执行后会生成测试结果。
Statistcs(性能统计)和Call Graph(调用关系图)
Statistcs
-
表头Name显示被调用的模块或者函数;Call Count显示被调用的次数;Time(ms)显示运行时间和时间百分比,时间单位为毫秒(ms)。
-
点击表头上的小三角可以升序或降序排列表格。
-
在Name这一个列中双击某一行可以跳转到对应的代码。
Call Graph
-
右上角的4个按钮表示放大、缩小、真实大小、合适大小;
-
箭头表示调用关系,由调用者指向被调用者;
-
矩形的左上角显示模块或者函数的名称,右上角显示被调用的次数;
-
矩形中间显示运行时间和时间百分比;
-
矩形的颜色表示运行时间或者时间百分比大小的趋势:红色 > 黄绿色 > 绿色
微信图片_20180716152346.png
网友评论