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. (null): Linker command failed with exit code 1 (use -v to see invocation)

    他山之石,可以攻玉. 感谢热心网友. 此处有更佳的分析:http://www.cnblogs.com/xiaoyouPrince/p/5260378.html

  2. ghost 还原系统时,遇到error 10010,提示can not open image file

    昨天系统有点问题,在用Ghost还原系统时,一直提示10010错误,提示can not open image file 想着可能是备份文件的问题,从另一台电脑上重新拷过来一份,仍然不行,Ghost还是 ...

  3. eclipse Juno Indigo Helios Galileo 版本

    Galileo Ganymede Europa 这些名字代表eclipse不同的版本 2001年11月7日 ,Eclipse 1.0发布  半年之后,2002年6月27日Eclipse进入了2.0时代 ...

  4. iOS中两个APP之间的跳转和通信

    app间的跳转 一:在第一个app首先要做下面这些操作: 1.在info.plist文件中的Information Property List下添加一项:URL types. 2.点开URL type ...

  5. 【Maven】使用Maven构建多模块项目

    Maven多模块项目 Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理.尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定 ...

  6. 浅谈.Net WebService开发

    一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使   用WebSer ...

  7. QT--以共享的方式发布应用,QT依赖库

    Building Qt as a Shared Library 因为:QT基本上都是采用动态编译的(被安装的OS中的),(如安装包往往都是默认动态编译处理好的动态库),所以我们采用动态连接的方式进行发 ...

  8. linux-5重要进程守护

    当给一台主机安装上linux系统后可以工作了-包括接受用户的输入/计算/存储/再将结果输出等等,这都是系统服务帮助我们完成的.而有一些系统服务时刻等待用户的输入(r如键盘进程)或随时响应用户的请求(如 ...

  9. 检测网页地址有效性java代码

    package com.inspur.linkcheck; import java.io.IOException; import java.net.HttpURLConnection; import ...

  10. CSDN 分糖果算法的思路和求助

    昨天晚上 在csdn上做了一道分糖果的题目,我自个测的是没有问题,但是提交答案后,老失败,提示 你的程序正常运行并输出了结果,但是答案错误你的程序输出结果与测试数据中的输出结果不符 我先把自个思路说一 ...