操作系统 : 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分析相关推荐

  1. python开心麻花影视作品分析的程序源码加文档加说明

    在PyCharm中运行<开心麻花影视作品分析>即可进入如图1所示的系统主界面.在该界面中,选择要分析的电影名称,然后单击"分析"按钮即可. 图1  系统主界面 具体的操 ...

  2. Python 优化第一步: 性能分析实践 使用cporfile+gprof2dot可视化

    拿来主义: python -m cProfile -o profile.pstats to_profile.py gprof2dot -f pstats profile.pstats |dot -Tp ...

  3. 解释python脚本程序的name变量及其作用_一些概念总结

    is 与 == 的区别 Python中万物皆对象,每个对象都包含3个属性:id,type,value.1.id就是对象地址,可以通过内置函数id()查看对象引用的地址.2.type就是对象类型,可以通 ...

  4. python性能差_Python 性能分析大全

    虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求.但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚 ...

  5. python游戏程序-python游戏程序

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 易于阅读:python代码定义更清晰. 易于维护:源代码是相当容易维护的 ...

  6. python语言程序设计嵩天-Python语言程序设计基础(第2版)嵩天课后答案

    嵩天.礼欣.黄天羽Python语言程序设计基础(第2版)习题答案本书提出了以理解和运用计算生态为目标的Python语言教学思想,在系统讲解Python语言语法的同时介绍了从数据理解到图像处理的14个P ...

  7. python编写程序-30分钟学会用Python编写简单程序

    参与文末每日话题讨论,赠送异步新书 异步图书君 学习目标 知道有序的软件开发过程的步骤. 了解遵循输入.处理.输出(IPO)模式的程序,并能够以简单的方式修改它们. 了解构成有效Python标识符和表 ...

  8. python从视频中提取音频_提取视频中的音频——python三行程序搞定!

    原标题:提取视频中的音频--python三行程序搞定! 写在开头 身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一 ...

  9. Python/Java程序员面试必备常用问题解析与答案

    转自AI算法联盟,理解python技术问题,以及一些常见的java面试中经常遇到的问题,这些面试问题分为四类: 是什么(what) 如何做(how) 说区别/谈优势(difference) 实践操作( ...

最新文章

  1. NTU 课程笔记:MAS 714(16) 图灵机
  2. 常用算法 之一 详解 MD5 实现(基于算法的官方原文档)及源码详细注释
  3. Android 获取屏幕宽度和高度直接转换为DP
  4. SQL Server Profiler
  5. android学习笔记---63-PopupWindow,泡泡窗口的实现
  6. 什么是堆什么是栈以及两者区别特点
  7. 有哪些是你踏入社会才明白的道理?
  8. 让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑.
  9. 2017年网站建设公司现状分析
  10. Python中用冒号表达式对列表切片
  11. 【流媒体服务】海康摄像头RTSP视频推流、转码、拉流、直播综合应用(六):【1】VLC+FFMPEG+Nginx实现RTSP到RTMP网页直播
  12. Easypoi导出excel
  13. 【任玉刚】给Android程序员的一些面试建议
  14. c语言练习 落雷游戏
  15. 【Tableau Desktop 企业日常问题29】Tableau desktop 更换电脑的时候 迁移License
  16. 简单易懂的现代魔法——Play Framework攻略3
  17. Caffe中的solver文件参数
  18. Hex Fiend很强大
  19. 安装X61驱动 xp
  20. iphone手机投射到电脑的过程详解

热门文章

  1. 控制反转(Ioc)和依赖注入(DI)
  2. Winform ComboBox控件高亮显示
  3. 转:STL:string 大小(Size)和容量(Capacity)
  4. STM32 串口ISP下载
  5. 强化学习—— 蒙特卡洛树(Monte Carlo Tree Search, MCTS)
  6. C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 返回多个值
  7. 区块链BaaS云服务(17)纸贵科技Z-BaaS零知识证明
  8. 《研磨设计模式》chap3 外观模式Facade
  9. java结丹期(16)----javaweb(maven(2))
  10. kubenetes中YAML的字段解释