Python性能分析工具Profile
Python性能分析工具Profile
代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,cProfile 与 hotshot 等。其中 Profiler 是 python 自带的一组程序,能够描述程序运行时候的性能,并提供各种统计帮助用户定位程序的性能瓶颈。Python 标准模块提供三种 profilers:cProfile,profile 以及 hotshot。
profile 的使用非常简单,只需要在使用之前进行 import 即可,也可以在命令行中使用。
使用Profile
测试示例:
import profile
def a():
sum = 0
for i in range(1, 10001):
sum += i
return sum def b():
sum = 0
for i in range(1, 100):
sum += a()
return sum
if __name__ == "__main__":
profile.run("b()")
输出结果:
104 function calls in 0.094 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.094 0.094 :0(exec)
1 0.000 0.000 0.000 0.000 :0(setprofile)
1 0.000 0.000 0.094 0.094 <string>:1(<module>)
1 0.000 0.000 0.094 0.094 profile:0(b())
0 0.000 0.000 profile:0(profiler)
99 0.094 0.001 0.094 0.001 test.py:15(a)
1 0.000 0.000 0.094 0.094 test.py:21(b)
其中输出每列的具体解释如下: ●ncalls:表示函数调用的次数; ●tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间; ●percall:(第一个 percall)等于 tottime/ncalls; ●cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间; ●percall:(第二个 percall)即函数运行一次的平均时间,等于 cumtime/ncalls; ●filename:lineno(function):每个函数调用的具体信息; 如果需要将输出以日志的形式保存,只需要在调用的时候加入另外一个参数。如 profile.run(“profileTest()”,”testprof”)。
命令行
如果我们不想在程序中调用profile库使用,可以在命令行使用命令。
import os def a():
sum = 0
for i in range(1, 10001):
sum += i
return sum def b():
sum = 0
for i in range(1, 100):
sum += a()
return sum print b()
运行命令查看性能分析结果
python -m cProfile test.py
将性能分析结果保存到result文件
python -m cProfile -o result test.py
使用pstats来格式化显示结果
python -c "import pstats; p=pstats.Stats('reslut); p.print_stats()"
python -c "import pstats; p=pstats.Stats('result'); p.sort_stats('time').print_stats()
sort_stats支持一下参数: calls, cumulative, file, line, module, name, nfl, pcalls, stdname, time
测试示例:在代码中直接使用profile与stats
import os
def a():
sum = 0
for i in range(1, 10001):
sum += i
return sum
def b():
sum = 0
for i in range(1, 100):
sum += a()
return sum
print b()
import cProfile
#cProfile.run("b()")
cProfile.run("b()", "result")
import pstats
pstats.Stats('result').sort_stats(-1).print_stats()
refence
https://blog.csdn.net/xiemanR/article/details/69398057
https://www.cnblogs.com/wangjian8888/p/6095772.html
https://blog.csdn.net/kongxx/article/details/52216850
http://ju.outofmemory.cn/entry/46805
Python性能分析工具Profile的更多相关文章
- Python 性能分析工具简介
Table of Contents 1. 性能分析和调优工具简介 1.1. Context Manager 1.2. Decorator 1.3. 系统自带的time命令 1.4. python ti ...
- Python性能分析工具
import cProfile import pstats from flask import Flask,jsonify, request @app.route("/test", ...
- Android性能分析工具Profile GPU rendering详细介绍
如何在一个应用中追踪和定位性能问题,甚至在没有它的源代码的情况下?? “Profile GPU rendering”(GPU渲染分析),一款Android4.1所引入的工具.你可以在“设置”应用的“开 ...
- cProfile——Python性能分析工具
Python自带了几个性能分析的模块:profile.cProfile和hotshot,使用方法基本都差不多,无非模块是纯Python还是用C写的.本文介绍cProfile. 例子 import t ...
- Python性能分析
Python性能分析 https://www.cnblogs.com/lrysjtu/p/5651816.html https://www.cnblogs.com/cbscan/articles/33 ...
- 如何进行python性能分析?
在分析python代码性能瓶颈,但又不想修改源代码的时候,ipython shell以及第三方库提供了很多扩展工具,可以不用在代码里面加上统计性能的装饰器,也能很方便直观的分析代码性能.下面以我自己实 ...
- 系统级性能分析工具perf的介绍与使用
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
- Python 性能剖分工具
Python 性能剖分工具 眼看着项目即将完成,却被测试人员告知没有通过性能测试,这种情况在开发中屡见不鲜.接下来的工作就是加班加点地找出性能瓶颈,然后进行优化,再进行性能测试,如此这般周而复始直到通 ...
- 系统级性能分析工具perf的介绍与使用[转]
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
随机推荐
- Spring Data Jpa (五)@Entity实例里面常用注解详解
详细介绍javax.persistence下面的Entity中常用的注解. 虽然Spring Data JPA已经帮我们对数据的操作封装得很好了,约定大于配置思想,帮我们默认了很多东西.JPA(Jav ...
- 基于 Golang 完整获取百度地图POI数据的方案
百度地图为web开发者提供了基于HTTP/HTTPS协议的丰富接口,其中包括地点检索服务,web开发者通过此接口可以检索区域内的POI数据.百度地图处于数据保护对接口做了限制,每次访问服务,最多只能检 ...
- python双划线类型
通过__开始的属性感觉分为两种类型: 利用dir调用的时候: < build in x object at 0x01F116B0>:这种貌似和运算符重载有关系,用户如果需要的话可以重写该函 ...
- Starting MySQL... ERROR! The server quit without updating PID file (/usr/local/mysql/data/VM_0_6_centos.pid)
刚接触MySql数据库,参考一些文章后搭建起来了也创建了数据库,程序跑到很好,一觉醒来突然连接不上了 MySql数据库了. 研究了好一会才找到原因. 现象: 登录数据库失败 [root@VM_0_6_ ...
- (转)GitBlit安装
转:https://blog.csdn.net/qq_32599479/article/details/90748371 GitBlit的安装本文是基于Windows 10系统环境,安装和测试GitB ...
- c/c++二级指针动态开辟内存
c版: #include <stdio.h> #include <stdlib.h> #define row 4 #define col 8 int main() { int ...
- Latex常用公式整理
目录 常用 常用数学公式 常用希腊字母 说明:博客园中的Latex编辑是以$ latex公式 $,为边界. 1.常用 描述 Latex公式 表达式 下标 x_2 x2 上标 x^2 x2 分数 \f ...
- java 8 jdk1.8 新特性
1Lambda表达式 2函数式接口 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. java 8为函数式接口引入了一个新注解@Fu ...
- 举例讲解Python中的死锁、可重入锁和互斥锁
举例讲解Python中的死锁.可重入锁和互斥锁 一.死锁 简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况. 1.迭代死锁 该情况是一 ...
- jupyter 服务器安装随笔
python3:python3 -m pip install --upgrade pip python3 -m pip install jupyterpkg install py36-pyzmq-18 ...