paip.性能跟踪profile原理与架构与本质-- python扫带java php



##背景

弄个个输入法音标转换atiEnPH工具,老是python性能不的上K,7k记录浏览过k要30分钟了.



##目标

 分析一个程序的性能,最终都归结为回答4个基本的问题:



    程序运行速度有多快?

    运行速度瓶颈在哪儿?

    程序使用了多少内存?

    内存泄露发生在哪里?

    谁引用着泄漏的对象?

    

    

    作者 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

    

#工具cProfile,objgraph

谁引用着泄漏的对象? 这个可以使用对象引用图来看见..

 该命令的输出应该是一副PNG图像,保存在/tmp/backrefs.png,它看起来是像这样:



back refrences



最下面有红字的盒子是我们感兴趣的对象。我们可以看到,它被符号x引用了一次,被列表y引用了三次。如果是x引起了一个内存泄漏,我们可以使用这个方法,通过跟踪它的所有引用,来检查为什么它没有自动的被释放。



回顾一下,objgraph 使我们可以:



    显示占据python程序内存的头N个对象

    显示一段时间以后哪些对象被删除活增加了

    在我们的脚本中显示某个给定对象的所有引用



#测试代码

import cProfile

 

#直接把分析结果打印到控制台

cProfile.run("mainx()")

#把分析结果保存到文件中,不过内容可读性差...需要调用pstats模块分析结果

#cProfile.run("foo()", "result")

#还可以直接使用命令行进行操作

#>python -m cProfile myscript.py -o result





def convert2atiEnPn(phntc):#17.3s  49tse

        """  æk@sentjueit   >>  e@k@sen@tju@ei@t

        """

        r=""

        

        #print ("o412")

        #print(map)

        #100test logx abt 3s

        #logx("  phntc:---"+phntc)

        li= SybalbeList(phntc)   #7.6s

        #logx("  syblist:---")

        #print_li(li)

        for sbl in li:

            #all saveval invoke time safeVal 5.6s    446tse

            #todox gaicheng  jude modul ..only   0.1s  

            #yuln ...python d excepti jon fei resource l a .

            myvowel=safeVal (map, sbl.vowel,  "")

            mycnst=safeVal (map,  sbl.csnt , "")

            r=r+"@"+mycnst+"-"+myvowel

       # phntc=trim(phntc)

      

        return r

        

#第一的测试

       157277 function calls in 20.648 seconds



   Ordered by: standard name



   ncalls  tottime  percall  cumtime  percall filename:lineno(function)

        1    0.000    0.000   20.648   20.648 <string>:1(<module>)

       49    0.006    0.000   17.359    0.354 <string>:15(convert2atiEnPn)

       49    0.003    0.000    1.105    0.023 <string>:2(updatexo4)

        1    0.003    0.003   20.648   20.648 <string>:37(mainx)        

        

#第二次:



          118375 function calls in 9.266 seconds



   Ordered by: standard name



   ncalls  tottime  percall  cumtime  percall filename:lineno(function)

        1    0.000    0.000    9.265    9.265 <string>:1(<module>)

       49    0.002    0.000    6.395    0.131 <string>:15(convert2atiEnPn)

       49    0.003    0.000    1.155    0.024 <string>:2(updatexo4)

        1    0.004    0.004    9.265    9.265 <string>:39(mainx)    



#分析结果:

能看见,python的异常很消耗性能.   使用 if key in map 代替异常,,,性能消耗从5s直到个0.1s

日志也比较消耗性能        

    

#java跟php的profile

java jprofile,.. php xdebug..





参考

关于Python Profilers性能分析器 - btchenguang - 博客园.htm

Python性能分析指南 - 技术翻译 - 开源中国社区.htm

Python--字典-fussfuss1-ChinaUnix博客.htm

paip.性能跟踪profile原理与架构与本质-- python扫带java php的更多相关文章

  1. JProfiler 解决 Java 服务器的性能跟踪

    作者:徐建祥(netpirate@gmail.com) 时间: 2006/01/05 来自:http://www.anymobile.org 1.摘要......................... ...

  2. Zookeeper概论(对zookeeper的概论、原理、架构等的理解)

    Zookeeper概论(对zookeeper的概论.原理.架构等的理解) 一.概论 Zookeeper是一个分布式的.开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是h ...

  3. zabbix监控的基础概念、工作原理及架构(一)

    zabbix监控的基础概念.工作原理及架构 转载于网络 一.什么是zabbix及优缺点 Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的 ...

  4. LeakCanary 内存泄漏 监测 性能优化 简介 原理 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. Atitit.数据库表的物理存储结构原理与架构设计与实践

    Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...

  6. React生命周期和响应式原理(Fiber架构)

    注意:只有类组件才有生命周期钩子函数,函数组件没有生命周期钩子函数. 生命周期 装载阶段:constructor() render() componentDidMount() 更新阶段:render( ...

  7. Atitit paip.对象方法的实现原理与本质.txt

    Atitit paip.对象方法的实现原理与本质.txt 对象方法是如何实现的1 数组,对象,字典1 对象方法是如何实现的 这显然是一个对象方法调用.但对象方法是如何实现的呢?在静态语言中,因为有编译 ...

  8. paip.关于动画特效原理 html js 框架总结

    paip.关于动画特效原理 html js 框架总结 1. 动画框架的来源:flex,jqueryui 3 2. 特效的分类 3 2.1. Property effects 动态改变一个或多个目标对象 ...

  9. 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述

    老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述   HierarchyViewer库的引入让M ...

随机推荐

  1. 【POJ2949】Word Rings(最大平均值环)

    题意:给定N个字符串,如果A串的最后两个字母跟B串的前两个字母相同它们就能连接. 求一个由字符串组成的首尾相连的环,使(字符串总长度/字符串个数)最大. n<=100000 len<=10 ...

  2. poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9472   ...

  3. flask--虚拟环境

    1.安装虚拟环境mosson@mosson:~$ sudo apt-get install virtualenv2.创建一个项目目录mosson@mosson:~$ mkdir myproject3. ...

  4. eclipse 配置黑色主题

    虽然以前也使用eclipse的黑色主题,但是配置起来稍微麻烦一点. 这里先声明,下面的方式适合最新版本的Eclipse Luna,旧的版本可以下载我提供的这个插件,并将其放在eclipse目录下的pl ...

  5. UILabel的常用属性

    UILabel常用属性1——实例化和设置文字 // 实例化UILabel并指定其边框 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake ...

  6. WPF错误:当前上下文中不存在名称“InitializeComponent”

    当修改一个View的名称为VCFCView.xaml的时候,一定要记得在内部x:Class也要修改为XXXX.VCFCView,否则会报错误(图三) 当前上下文中不存在名称"Initiali ...

  7. 用nodej和glub-watcher写的监听go 项目自动编译,很鸡肋

    glub 一般都是很轻量的编译. go太重了,改一小个部分,就编译的话,多数是编译失败. 而且很消耗性能,还没想到完美的优化办法. 暂时用个定时器 监听2秒,停止1秒,如此循环,会减少些 “无效”的编 ...

  8. 在UITableViewStylePlain情况下sectionHeader可以与tableview一起滑动的解决方法

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sectionHeaderHeight = ; ) { scrollVi ...

  9. Gossip protocol(zz)

    Gossip protocol 这是一系列用于P2P的通信协议.简单来说,就是模拟人类社会中流言传播的方式.每个节点随机地把消息发给它的邻居,接到消息的节点,如果之前没收到这个消息,则会继续随机地转发 ...

  10. DOM、JDOM、DOM4J的区别(转载)

    DOM.JDOM.DOM4J的区别 分类: XML2012-06-11 20:47 5576人阅读 评论(6) 收藏 举报 文档xmlcollectionsjavaapi工作 dom是解析xml的底层 ...