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. zoj1260 king

    题目描述:从前有一个王国,皇后怀孕了.她祈祷到:如果我的孩子是儿子,我希望他是一个健康的国王. 9 个月后,她的孩子出生了,的确,她生了一个漂亮的儿子.但不幸的是,正如皇室家庭经常发生的那样,皇后的儿 ...

  2. Builder(生成器)-对象创建型模式

    一.意图 将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示. 二.动机 一个复杂的对象的构造过程中,原料相同,可能会要求生产不同的产品,并且生产的产品种类还能够方便的增加.Bu ...

  3. Visual Studio 必备神器

    会使用工具是人类文明的一大进步,今天敏捷大行其道,好的工具可以大大的提高生产力,这里说的工具都是VS平台上的扩展工具,一些机械的部分可以交给工具去处理,自己多关注其他部分.下面分享下我觉得不错的工具, ...

  4. Java中XML格式的字符串4读取方式的简单比较

    Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...

  5. iOS键盘出现时界面跟着往上推

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillShow:) name:UI ...

  6. Navicat for Oracle 连接oracle 配置

    oci.dll  替换为对应oracle版本的oci.dll

  7. Browser默认书签加载过程

    Browser配置默认书签——string.xml中<string-array name="bookmarks" translatable="false" ...

  8. C++通过模板实现多态

    #include <iostream> using namespace std; template<typename T> class Phone { public: void ...

  9. 【转】Mysql 存储引擎中InnoDB与Myisam的主要区别

    1, 事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好.   2,select ,update ,insert ,delete 操作   MyISA ...

  10. 用Fragment制作的Tab页面产生的UI重叠问题

    本文出处:http://blog.csdn.net/twilight041132/article/details/43812745 在用Fragment做Tab页面,发现有时候进入应用会同时显示多个T ...