python profile_python程序之profile分析
操作系统 : CentOS7.3.1611_x64
python版本:2.7.5
问题描述
1、Python开发的程序在使用过程中很慢,想确定下是哪段代码比较慢;
2、Python开发的程序在使用过程中占用内存很大,想确定下是哪段代码引起的;
解决方案
使用profile分析分析cpu使用情况
可以使用profile和cProfile对python程序进行分析,这里主要记录下cProfile的使用,profile参考cProfile即可。
假设有如下代码需要进行分析(cProfileTest1.py):
#! /usr/bin/env python#-*- coding:utf-8 -*-
deffoo():
sum=0for i in range(100):
sum+=ireturnsumif __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、修改程序
加入如下代码:
importcProfile
cProfile.run("foo()")
运行效果如下:
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)1 0.000 0.000 0.000 0.000 :1()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 installpsutil
pipinstall memory_profiler
假设有如下代码需要进行分析:
def my_func():
a= [1] * (10*6)
b= [2] * (10*7)
del b
return a
使用memory_profiler是需要修改代码的,这里记录下以下两种使用方式:
1、不导入模块使用
@profile
def my_func():
a= [1] * (10*6)
b= [2] * (10*7)
del b
return a
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.0MiB @profile7def 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.0MiB del b11 29.5 MiB 0.0 MiB return a
好,就这些了,希望对你有帮助。
本文github地址:
欢迎补充
python profile_python程序之profile分析相关推荐
- python开心麻花影视作品分析的程序源码加文档加说明
在PyCharm中运行<开心麻花影视作品分析>即可进入如图1所示的系统主界面.在该界面中,选择要分析的电影名称,然后单击"分析"按钮即可. 图1 系统主界面 具体的操 ...
- Python 优化第一步: 性能分析实践 使用cporfile+gprof2dot可视化
拿来主义: python -m cProfile -o profile.pstats to_profile.py gprof2dot -f pstats profile.pstats |dot -Tp ...
- 解释python脚本程序的name变量及其作用_一些概念总结
is 与 == 的区别 Python中万物皆对象,每个对象都包含3个属性:id,type,value.1.id就是对象地址,可以通过内置函数id()查看对象引用的地址.2.type就是对象类型,可以通 ...
- python性能差_Python 性能分析大全
虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求.但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚 ...
- python游戏程序-python游戏程序
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 易于阅读:python代码定义更清晰. 易于维护:源代码是相当容易维护的 ...
- python语言程序设计嵩天-Python语言程序设计基础(第2版)嵩天课后答案
嵩天.礼欣.黄天羽Python语言程序设计基础(第2版)习题答案本书提出了以理解和运用计算生态为目标的Python语言教学思想,在系统讲解Python语言语法的同时介绍了从数据理解到图像处理的14个P ...
- python编写程序-30分钟学会用Python编写简单程序
参与文末每日话题讨论,赠送异步新书 异步图书君 学习目标 知道有序的软件开发过程的步骤. 了解遵循输入.处理.输出(IPO)模式的程序,并能够以简单的方式修改它们. 了解构成有效Python标识符和表 ...
- python从视频中提取音频_提取视频中的音频——python三行程序搞定!
原标题:提取视频中的音频--python三行程序搞定! 写在开头 身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一 ...
- Python/Java程序员面试必备常用问题解析与答案
转自AI算法联盟,理解python技术问题,以及一些常见的java面试中经常遇到的问题,这些面试问题分为四类: 是什么(what) 如何做(how) 说区别/谈优势(difference) 实践操作( ...
最新文章
- NTU 课程笔记:MAS 714(16) 图灵机
- 常用算法 之一 详解 MD5 实现(基于算法的官方原文档)及源码详细注释
- Android 获取屏幕宽度和高度直接转换为DP
- SQL Server Profiler
- android学习笔记---63-PopupWindow,泡泡窗口的实现
- 什么是堆什么是栈以及两者区别特点
- 有哪些是你踏入社会才明白的道理?
- 让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑.
- 2017年网站建设公司现状分析
- Python中用冒号表达式对列表切片
- 【流媒体服务】海康摄像头RTSP视频推流、转码、拉流、直播综合应用(六):【1】VLC+FFMPEG+Nginx实现RTSP到RTMP网页直播
- Easypoi导出excel
- 【任玉刚】给Android程序员的一些面试建议
- c语言练习 落雷游戏
- 【Tableau Desktop 企业日常问题29】Tableau desktop 更换电脑的时候 迁移License
- 简单易懂的现代魔法——Play Framework攻略3
- Caffe中的solver文件参数
- Hex Fiend很强大
- 安装X61驱动 xp
- iphone手机投射到电脑的过程详解
热门文章
- 控制反转(Ioc)和依赖注入(DI)
- Winform ComboBox控件高亮显示
- 转:STL:string 大小(Size)和容量(Capacity)
- STM32 串口ISP下载
- 强化学习—— 蒙特卡洛树(Monte Carlo Tree Search, MCTS)
- C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 返回多个值
- 区块链BaaS云服务(17)纸贵科技Z-BaaS零知识证明
- 《研磨设计模式》chap3 外观模式Facade
- java结丹期(16)----javaweb(maven(2))
- kubenetes中YAML的字段解释