`
isiqi
  • 浏览: 16353155 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Python 性能剖分工具

阅读更多

Python 性能剖分工具

眼看着项目即将完成,却被测试人员告知没有通过性能测试,这种情况在开发中屡见不鲜。接下来的工作就是加班加点地找出性能瓶颈,然后进行优化,再进行性能测试,如此这般周而复始直到通过性能测试。尽管丰富的工作经验有助于性能优化,但只有科学地应用工具才能在最短的时间内找出最佳优化粒度的瓶颈代码段,达到事半功倍的效果。

profilecProfilehotshot

Python 内置了丰富的性能优化工具来帮助我们定位性能瓶颈,如:profilecProfile hotshot。它们易于使用,而且有完备的支持文档可供参考。下面以最常用的 profile 模块为例来说明它们的使用方法,假定要剖分的脚本文件为 foo.py ,它的内容如下:

def foo():

sum = 0

for i in range(100):

sum += i

return sum

if __name__ == "__main__":

foo()

foo.py 进行性能剖分的方法之一是修改 foo.py 里的 if 程序块,引入 profile 模块:

if __name__ == "__main__":

import profile

profile.run("foo()")

然后执行 foo.py 即可完成性能剖分,剖分结果将以文本报表的形式打印到标准输出。

因为上述方法需要修改 foo.py 文件,所以我们通常更倾向于使用无需修改源文件的方法——就是在命令行中用应用 python –m 参数来执行 profile

python –m profile foo.py

除了可以使用 profile 模块外,还可以使用 cProfile 模块。cProfile C 语言实现,是剖分代价更低的剖分器,有和 profile 模块相同的接口,但只能用于2.5或以上版本。Python 另一个内置的剖分器是 hotshot,但是 hotshot 模块已经不再推荐使用,因为将来它可能会被移出标准库。

pstats

无论使用哪个剖分器,它的剖分数据都可以保存到二进制文件,如foo.prof。分析和查看剖分结果文件需要使用 pstats 模块,它极具伸缩性,可以输出形式多样的文本报表,是文本界面下不可或缺的工具。

使用 pstats 分析剖分结果很简单,几行代码就可以了:

import pstats

p = pstats.Stats("foo.prof")

p.sort_stats("time").print_stats()

运行上述脚本将输出结果为按函数内部运行时间(不计调用子函数的时间)长短排序的报表。

sort_stats() 方法是 pstats.Stats 最重要的方法之一,它用以对剖分数据进行排序。sort_stats() 接受一个字符串参数,这个字符串标识了排序的字段,常用的可选的参数及其意义如下:

‘ncalls’

被调用次数

‘cumulative’

函数运行的总时间

‘nfl’

Name/file/line

‘time’

函数内部运行时间(不计调用子函数的时间)

除了 sort_stats() 外, pstats.Stats 还有 print_callees() print_callers() 方法用以输出指定函数所调用的函数和调用过指定函数的函数。

除了编编程接口外,pstats 还提供了友好的命令行交互环境,在命令行执行 python –m pstats 就可以进入交互环境,在交互环境里可以使用 read/add 指令读入/加载剖分结果文件,stats 指令用以查看报表, callees callers 指令用以查看特定函数的被调用者和调用者。下图是 pstats 的截图,标识了它的基本使用方法:

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="width: 415.5pt; height: 357.75pt;" type="#_x0000_t75"><imagedata o:title="pstats" src="file:///C:%5CDOCUME~1%5CLai%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png"></imagedata></shape>

<!-- SiteSearch Google --> 有问题不明白?请教Google大神吧!
Google 输入您的搜索字词 提交搜索表单
Web blog.csdn.net
<!-- SiteSearch Google -->
分享到:
评论

相关推荐

    Python性能优化经验谈.pdf

    3、Python性能优化工具 Python内置了丰富的性能优化工具来帮助我们定位性能瓶颈,如:profile、cProfile和hotshot。它们易于使用,而且有完备的支持文档可供参考。使用这些工具可以快速找到瓶颈代码段和最佳优化...

    Python-用人体测量模型重塑人体三维

    "Python-用人体测量模型重塑人体三维"是一个涵盖数据处理、3D建模和可视化技术的综合项目,它利用Python的灵活性和丰富的库资源,将抽象的人体测量数据转化为生动的三维模型,为各领域的应用提供了强大的工具。

    基于Python的三维建模可视化系统的研究.pdf

    1. Python编程语言的应用:Python语言是一种高级编程语言,以其简洁的语法、强大的库支持和良好的跨平台性能著称。在三维建模可视化系统中,Python被用作“粘合剂”,可以方便地调用自身携带的计算模块以及通过Swig...

    根据EasyMesh改编的三角形单元自动剖分程序

    在本话题中,我们将深入探讨"根据EasyMesh改编的三角形单元自动剖分程序",这是一种针对二维空间的网格划分工具,特别适合用于简化复杂的几何模型的处理。 EasyMesh是一款开源的、基于有限元方法(FEM)的网格生成...

    Python库 | trimesh-1.10.1.tar.gz

    总之,`trimesh`库是Python中一个功能强大且易用的3D图形处理工具,无论你是进行学术研究、游戏开发还是工业设计,都能从中受益。通过这个1.10.1版本的压缩包,你可以获取完整的库源码,对其进行定制和扩展,以满足...

    Python库 | pyhull-1.5.2.tar.gz

    总的来说,pyhull-1.5.2是一个强大且易用的Python库,对于处理计算几何问题提供了便捷的工具。无论是科学研究还是工程应用,它都能成为你解决问题的好帮手。通过掌握pyhull库,我们可以更有效地进行数据处理,解决...

    Python库 | pytriangle-1.0.9.tar.gz

    总的来说,`pytriangle`是一个功能齐全、性能优良的Python库,它简化了三角形和三角网格的操作,为开发者提供了强大而灵活的工具。无论你是初学者还是经验丰富的开发者,`pytriangle`都能帮助你在处理几何问题时...

    3D扫描源代码_3D扫描_python_

    7. **三角网格化**: 将点云数据转换为可渲染的三角网格模型,常用的方法有最近邻插值、 delaunay 三角剖分等。 8. **卡尔曼滤波**或**粒子滤波**: 可用于平滑和优化连续的扫描结果,减少噪声和不连续性。 描述中的...

    tetgen:C ++ TetGen库的Python接口,用于生成任何3D多面体域的四面体网格

    综上所述,tetgen作为C++ TetGen库的Python接口,是三维几何剖分的重要工具,尤其在处理复杂的三维多面体域的四面体网格生成任务时,它提供了一种高效、灵活的解决方案。结合Python的便利性,tetgen使得科学家和...

    PyPI 官网下载 | shewchuk-2.0.0-cp38-cp38-win_amd64.whl

    对于“shewchuk”库来说,这意味着它已经过优化,能够充分利用Python 3.8提供的新功能和性能提升。 **后端开发** 在软件开发中,后端通常指服务器端逻辑,负责处理数据存储、业务逻辑和系统间的通信。Python由于其...

    faceAverage.rar

    在这个过程中,我们使用了Python编程语言,结合强大的dlib库和Delaunay三角剖分算法。 dlib是一个功能丰富的C++库,它包含了大量用于机器学习和图像处理的工具。在人脸识别方面,dlib特别出名的是它的面部检测和...

    delaunay:一个在Python和C ++中使用Bowyer–Watson算法的简单delaunay三角剖分库

    总之,"delaunay"库为用户提供了方便的工具,能够快速有效地执行Delaunay三角剖分,无论是在Python的高灵活性环境中还是C++的高性能计算中。它可以帮助开发者处理点云数据,生成适用于各种应用的三角网格,比如地图...

    Triangle_linux.zip_Delaunay_triangle

    在Linux环境下,实现Delaunay三角剖分通常涉及到编程语言的选择,如C++、Python等,以及使用开源库,如CGAL(Computational Geometry Algorithms Library)或Triangle库。Triangle库是一个由J. Shewchuk编写的轻量级...

    PyPI 官网下载 | mapbox_earcut-0.12.11.tar.gz

    总的来说,mapbox_earcut是Python开发者处理2D几何形状的强大工具,尤其在地图应用和图形处理领域。通过PyPI提供的0.12.11版本,用户可以利用Earcut算法的优势,轻松地对复杂几何数据进行三角化,进而进行各种计算和...

    cycloud:用 Cython 实现的 Python 点云实用程序库

    8. **计算几何**:库可能包含了计算几何的工具,如计算点到面的距离、三角剖分、表面重建等,这些都是理解和操作点云所必需的。 9. **优化**:由于 cycloud 使用 Cython 编写,其性能优化可能非常显著。Cython 允许...

    数据集目录,其中 包含 4 阶三角测量的示例.rar

    分析这类数据通常需要使用专业软件或编程语言,如MATLAB、Python(使用numpy和scipy库)、或者GIS工具(如QGIS或ArcGIS)。 为了理解和利用这个数据集,你需要了解以下几个关键知识点: 1. **几何数据结构**:理解...

    Polygon3-3.0.9.1-cp37-cp37m-win_amd64.zip

    5. **算法实现**:库中集成了多种算法,如Delaunay三角剖分、最近点查找、凸包生成等,这些都是三维几何处理中的重要工具。 6. **接口友好**:Polygon3库的API设计直观,易于理解和使用,同时提供丰富的文档和示例...

    scipy-1.9.0.tar.gz

    7. **空间几何和拓扑**:`scipy.spatial`模块包含了距离计算、kd树、voronoi图和 delaunay三角剖分等工具,广泛应用于地理信息系统和机器学习领域。 8. **统计功能**:`scipy.stats`提供了各种统计分布、假设检验、...

    等值线生成

    8. **GIS软件与编程库**:在IT实践中,生成等值线的工具和库包括ArcGIS、QGIS等GIS软件,以及Python的matplotlib、geopandas、scipy等库,R语言的ggplot2和fields包等。 9. **应用领域**:等值线广泛应用于气象预报...

Global site tag (gtag.js) - Google Analytics