python 代码性能分析 库
问题描述
1、Python开发的程序在使用过程中很慢,想确定下是哪段代码比较慢;
2、Python开发的程序在使用过程中占用内存很大,想确定下是哪段代码引起的;
解决方案
使用profile分析分析cpu使用情况
可以使用profile和cProfile对python程序进行分析,这里主要记录下cProfile的使用,profile参考cProfile即可。
假设有如下代码需要进行分析(cProfileTest1.py):
#! /usr/bin/env python
#-*- coding:utf-8 -*- def foo():
sum = 0
for i in range(100):
sum += i
return sum if __name__ == "__main__" :
foo()
可以通过以下两种使用方式进行分析:
1、不修改程序
分析程序:
python -m cProfile -o test1.out cProfileTest1.py
查看运行结果:
python -c "import pstats; p=pstats.Stats('test1.out'); p.print_stats()"
查看排序后的运行结果:
python -c "import pstats; p=pstats.Stats('test1.out'); p.sort_stats('time').print_stats()"
2、修改程序
加入如下代码:
#! /usr/bin/env python
#-*- coding:utf-8 -*- def foo():
sum = 0
for i in range(100):
sum += i
return sum if __name__ == "__main__" :
import cProfile
cProfile.run("foo()")
exit(0)
运行效果如下:
Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 cProfileTest2.py:4(foo)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 {range}
结果说明:
“”“
ncalls : 函数的被调用次数
tottime :函数总计运行时间,除去函数中调用的函数运行时间
percall :函数运行一次的平均时间,等于tottime/ncalls
cumtime :函数总计运行时间,含调用的函数运行时间
percall :函数运行一次的平均时间,等于cumtime/ncalls
filename:lineno(function) 函数所在的文件名,函数的行号,函数名
”“”
使用memory_profiler分析内存使用情况
需要安装memory_profiler
pip install psutil
pip install memory_profiler
假设有如下代码需要进行分析:
def my_func():
a = [1] * (10*6)
b = [2] * (10*7)
del b
return a
使用memory_profiler是需要修改代码的,这里记录下以下两种使用方式:
1、不导入模块使用
#! /usr/bin/env python
#-*- coding: utf-8 -*- # use : python -m memory_profiler test1.py @profile
def my_func():
a = [1] * (10*6)
b = [2] * (10*7)
del b
return a if __name__ == "__main__" :
my_func()
profile分析:
python -m memory_profiler test1.py
2、导入模块使用
from memory_profiler import profile @profile
def my_func():
a = [1] * (10*6)
b = [2] * (10*7)
del b
return a
完整代码如下:
直接运行程序即可进行分析。
运行效果如下:
(py27env) [mike@local test]$ python test1.py
Filename: test1.py Line # Mem usage Increment Line Contents
================================================
6 29.5 MiB 0.0 MiB @profile
7 def my_func():
8 29.5 MiB 0.0 MiB a = [1] * (10*6)
9 29.5 MiB 0.0 MiB b = [2] * (10*7)
10 29.5 MiB 0.0 MiB del b
11 29.5 MiB 0.0 MiB return a
python 代码性能分析 库的更多相关文章
- 使用 profile 进行python代码性能分析
定位程序性能瓶颈 对代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,c ...
- Python 代码性能优化技巧(转)
原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...
- Python, Django 性能分析工具的使用
最近接手的 Apache HUE 项目性能出现了问题,线上经常出现响应时间过长或因为时间过长而无法服务等问题.老大让我准备弄个性能分析工具,便于追踪和分析平台当前的瓶颈出现在哪里. 那就搞起吧!先从代 ...
- 11个Visual Studio代码性能分析工具
软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...
- .NET 11 个 Visual Studio 代码性能分析工具
原文地址 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行 ...
- 11 个 Visual Studio 代码性能分析工具
软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...
- .NET : 使用代码性能分析工具
NET : CLR Profiler的使用 经常讲课的时候会提到值类型和引用类型,也会提到如何查看它们的大小.多次被朋友问到,如何真的想要知道到底每个方法分配了多少内存之类的问题,其实这可以通过CLR ...
- [转] Python 代码性能优化技巧
选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...
- Python代码性能优化技巧
摘要:代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Python代码,看完一定会让你 ...
随机推荐
- 手动实现KNN算法
手动实现KNN算法 计算距离 取k个邻近排序 距离(欧氏) 预习 import numpy as np # 数组运算是面向元素级别的 arr1 = np.array([1,2,3]) arr2 = n ...
- C 是什么样的语言?
学习交流可加 微信读者交流①群 (添加微信:coderAllen) 程序员技术QQ交流①群:736386324 --- ==C 是什么样的语言?== 这个问题不要急于寻找问题的答案,而是应该先去考虑当 ...
- jquery 子元素 后代元素 兄弟元素 相邻元素
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...
- Linux学习21-设置定时任务crontab
前言 做自动化测试写的脚本需设置定时任务,在指定的时间去执行,这就需要用到定时任务.之前用jenkins可以在里面设置定时任务,很好用,其实不用jenkins,在linux上也可以用crontab做个 ...
- 微信小程序~设置tabBar后,wx.navigateTo不能跳转
当wx.navigateTo跳转链接跟app.json中设置的tabbar中跳转链接一样时,wx.navigateTo就不能跳转可以改为wx.switchTab 1.当app.json中设置了tabb ...
- Linux——CentOS7没有第二张网卡的配置信息
前言 为了一个实验做测试,在VMware中配置了环境,但是配置了双网卡后发现第二张网卡没有配置文件. 都是些基本命令就不写了,图里也有. 系统 : CentOS7.6 步骤 查看网卡信息 使用ip a ...
- C#编写简单的聊天程序(转)
这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固,同时希望能为初学的朋友提供一点参考.文章大体分为四个部分:程序的分析与设计.C#网络编 ...
- 【Spring】如何配置多个applicationContext.xml文件
在web.xml中通过contextConfigLocation配置spring 开发Java Web程序,使用ssh架构时,默认情况下,Spring的配置文件applicationContext.x ...
- AJax的三种响应
AJax的响应 1.普通文本方式(字符串) resp.getWriter().print("你好"); 2.JSON格式当要给前台页面传输 集合或者对象时 使用普通文本传输的时St ...
- Linux常用命令合集
常用命令合集 命令选项和参数 Linux中的命令格式为:command [options] [arguments] //中括号表示可选的,即有些命令不需要选项也不需要参数,但有的命令在运行时需要多个 ...