#微观剖析

'''

当找到速度很慢函数时,有时还需要做到测试某个部分函数剖析工作,这需要通过手动对一部分代码速度测试完成

'''

"""

import tempfile,os,pstats,cProfile

def p1(column='time',list1=5):

def _p1(function):

def __p1(*a,**k):

s=tempfile.mktemp()

p2=cProfile.Profile()

p2.runcall(function,*a,**k)

p2.dump_stats(s)

p=pstats.Stats(s)

p.sort_stats(column).print_stats(list1)

return __p1

return _p1

"""

import c

@c.p1()

def main1():

return c.p1()

main1()

"""

这种方法能够对应应用程序各部分进行测试, 使统计输出更加精确

但是这个阶段,被调用都的列表可能不太谁人有兴趣,因为函数已经被做为需要优化的部分,唯一令人有兴趣的是它让更快,然后改进它

timeit更行使这一需要,提供了一个简单的试题小型代码片断执行时间方法,它将宿主系统提供了的底层定时器(time.time或者time.clock),如下:

"""

import timeit

t=timeit.Timer('main()')

t.timeit(number=5)

"""

这个模块允许重复调用,适用于对忆隔离代码片断进行测试,在这 应用程序上下文之外非常有用

确定性剖析程序提供的结果依赖于运行它的电脑,因此每次生成结果都不一样,重复相同测试并且取其平均值能提供更精确的结果,而且有些电脑提供了特殊的cpu特性

,如speedsted,如果电脑在测试启动时处于闲置状态,也会改变结果,所以对于小的代码片断持续重复测试是一种良好的习惯

另外,不要忘记有各种缓存,如nds或cpu缓存.

"""

#另一种方法:装饰器

import time,sys

if sys.platform=='win32':

timer=time.clock

else:

timer=time.time

s={}

def d(name='start',start=s):

def _d(f):

def __d(*a,**k):

s1=timer()

try:

return f(*a,**k)

finally:

s1[name]=timer()-s1

return __d

return _d

#h1=d('this_func_is')(heavy)

#h1()

#print s['this_func_is']

python高级编程(第12章:优化学习)3的更多相关文章

  1. 第三章:Python高级编程-深入类和对象

    第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...

  2. 第九章:Python高级编程-Python socket编程

    第九章:Python高级编程-Python socket编程 Python3高级核心技术97讲 笔记 9.1 弄懂HTTP.Socket.TCP这几个概念 Socket为我们封装好了协议 9.2 cl ...

  3. 第十一章:Python高级编程-协程和异步IO

    第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...

  4. python高级编程:有用的设计模式2

    # -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一 ...

  5. python高级编程技巧

    由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr  ...

  6. python高级编程之选择好名称:完

    由于时间关系,python高级编程不在放在这边进行学习了,如果需要的朋友可以看下面的网盘进行下载 # # -*- coding: utf-8 -*- # # python:2.x # __author ...

  7. Python高级编程-Python一切皆对象

    Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 ""&qu ...

  8. python高级编程:有用的设计模式3

    # -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...

  9. python高级编程:有用的设计模式1

    # -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#设计械是可复用的,某种程序上它对软件设计中觉问题提供的语言 ...

  10. python高级编程读书笔记(一)

    python高级编程读书笔记(一) python 高级编程读书笔记,记录一下基础和高级用法 python2和python3兼容处理 使用sys模块使程序python2和python3兼容 import ...

随机推荐

  1. python入门第一天,循环与判断

    学习一门新的语言最重要的就是练习. 一.脚本需求: 编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 二.脚本流程图: 写代码之前画个流程图总是好的,可以让你理清思路,避免写着写着 ...

  2. The secret of ROWID

    表里每个数据行都有一个行头部,在这里存放了该行数据所包含的列的数量,以及锁定标记等.当某个事务更新某条记录时,会在该数据行的头部记录所用到的ITL槽号以及锁定标记.接下来则是列长度以及列的值.Orac ...

  3. Mybatis分页插件PageHelper正确的用法(网上有2篇不够科学的文章)

    今天下午在Mybatis项目中.实现分页.由于我是后加入项目中的,Leader用的是PageHelper这个组件.可是我在实际使用的过程中遇到了2个大问题. 1.p=2#comments" ...

  4. android 4.0之前版本号出现JSONException异常

    今天在调试解析server传过来的JSON数据时,在2.3.7的手机上报了以下这样一个异常. 08-07 22:00:29.597: W/System.err(7610): org.json.JSON ...

  5. 使用Qt Style Sheets制作UI特效

    引言 作为一套GUI框架,Qt是非常强大的.(注:Qt 不仅是一套优秀的GUI框架,同时也是一套出色的应用程序框架).在UI的制作方面Qt为广大开发者提供了一套强大而易用的工具,她就是——Qt Sty ...

  6. python进阶之路4.2---装饰器

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  7. python进阶之路4.1---生成器与迭代器

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  8. Oracle游标cursor2显示的游标等

    --在一中我们介绍了实现过程 select *from stud; declare cursor mycur is select id,name from stud;--1声明 v_id intege ...

  9. android default_workspace.xml

    //default_workspace.xml中,支持的标签有: favorite:应用程序快捷方式. shortcut:链接,如网址,本地磁盘路径等. search:搜索框. clock:桌面上的钟 ...

  10. <转> 纸牌屋1-4集分析

    原文:http://blog.sina.com.cn/s/blog_b86c61490102v56t.html 第一季第一集 主人公弗兰克的出场,是以对待一只邻家将死之狗的态度展开的,充分显示了主人公 ...