Python实现__metaclass__实现方法运行时间统计

#coding:utf-8
import sys,os,time,types,functools

#装饰器,包裹被检测函数,并计数
def timerit(func):
    @functools.wraps(func)
    def wrapper(*args,**kw):
        start=time.time()
        value=func(*args,**kw)
        end=time.time()
        print("%suse time is %s"%(func.__name__,end-start))
        return value
    return wrapper
#元类,被计数的函数__metaclass__指向这个函数
class profiler(type):
    def __new__(cls,name,base,attr):
        print(‘__new__ is called‘)
        #遍历被计数类的属性,如果是FunctionType则用计数装饰器包裹它
        for k,v in attr.items():
            if isinstance(v,types.FunctionType):
                attr[k]=timerit(v)
        return type.__new__(cls,name,base,attr)
class foo(metaclass=profiler):
    __metaclass__=profiler
    #这个地方有一个疑问,
    def countit(*args):
        sum=0
        for i in range(10000):
            sum=sum+i
        print(sum)

def main():
    import time
    print(time.time())
    print(hasattr(profiler,‘timeit‘))
    f=foo()
    f.countit()
    print(dir(f))
    print(f.__metaclass__)

if __name__=="__main__":
    main()

几天前写的,参考了园友的一篇文章,链接找不到了。先感谢,找到了链接再补上。

时间: 2024-10-17 14:18:41

Python实现__metaclass__实现方法运行时间统计的相关文章

Python List count()方法-用于统计某个元素在列表中出现的次数

描述 count() 方法用于统计某个元素在列表中出现的次数. 语法 count()方法语法: list.count(obj) 参数 obj -- 列表中统计的对象. 返回值 返回元素在列表中出现的次数. 实例 以下实例展示了 count()函数的使用方法: #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc', 123]; print "Count for 123 : ", aList.count(123); print "

Python字典高级使用方法汇总

Python字典高级使用方法汇总 字典(dictionary)是python中的一种非常灵活和强大的数据结构,可以完成很多操作.本文总结了一些除了基本的初始化.赋值.取值之外的常用的字典使用方法. 字典基础参考: [1]:http://www.w3cschool.cc/python/python-dictionary.html [2]:http://www.111cn.net/phper/python/56355.htm [3]:http://skyfen.iteye.com/blog/5675

python列表函数和方法

Python列表函数和方法 python列表中主要有以下函数: cmp(list1,list2)    比较两个列表的元素 len(list)           列表元素的个数 max(list)           返回列表元素的最大值 min(list)           返回列表元素的最小值 list(seq)           将元组转换成列表 ---------------------------------我是华丽的分割线----------------------------

编程中遇到的Python错误和解决方法汇总整理

这篇文章主要介绍了自己编程中遇到的Python错误和解决方法汇总整理,本文收集整理了较多的案例,需要的朋友可以参考下 开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析,并持续更新,方便以后查询,学习.知识在于积累嘛!微笑+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++错误: 复制代码代码如下: >>> def f(x, y):      print x, y  >>> t

java监测方法运行时间/效率方法

前言: 这周在写一个小项目,虽然小但是是纯调外部接口的,调完了接口还不停的循环接口返回的数据(已转换JSONArray),然后再判断值,再做不同处理,关键是数据量还比较大,这刚做完还没开始上线,测试也还没开始测呢,就想着自己先看看每个方法运行效率,省的数据大了项目挂掉(循环判断好多,有时还有2个for嵌套循环),就是纯粹在时间上进行监测,没有内存和cpu的监控. 主要利用了Spring AOP 技术,对想要统计的方法进行横切处理,方法执行前开始计时,方法执行后停止计时,得到计时方法就是该方法本次

spring3.0框架检测方法运行时间测试(转)

主要利用了Spring AOP 技术,对想要统计的方法进行横切处理,方法执行前开始计时,方法执行后停止计时,得到计时方法就是该方法本次消耗时间. 步骤: 首先编写自己的Interceptor类来实现MethodInterceptor类,来用于切入方法,运行计时代码 Spring AOP 的XML配置,配置需要监测的方法和切入方法(自定义的Interceptor) 1.自定义Intercept拦截器 package com.utis.intercept; import java.util.Hash

Python OS 文件/目录方法

Python OS 文件/目录方法 os 模块提供了非常丰富的方法用来处理文件和目录.常用的方法如下表所示: 序号 方法及描述 1 os.access(path, mode) 检验权限模式 2 os.chdir(path) 改变当前工作目录 3 os.chflags(path, flags) 设置路径的标记为数字标记. 4 os.chmod(path, mode) 更改权限 5 os.chown(path, uid, gid) 更改文件所有者 6 os.chroot(path) 改变当前进程的根

Python中的sort()方法的使用

本文和大家分享的主要是python中的sort()方法相关知识,一起来看看吧,希望对大家学习python有所帮助. 一.基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]]) 参数解释: (1)iterable指定要排序的list或者iterable,不用多说: (2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如: students为类对象的list

Windows系统下Python与NumPy安装方法

Windows系统下Python与NumPy安装方法 Windows下Python的某些第三方包安装步骤实在是太麻烦了(这里主要以NumPy为例,目前只有遇到安装它的时候出现了很多问题),晚上花了好几个小时才把NumPy科学计算包安装好,在这里描述下安装过程,避免大家走没有必要的弯路. 1,安装Python 首先,运行下载的MSI安装包,选择安装组件时,确保勾上了所有的组件. 特别要注意选上pip和Add python.exe to Path,然后多次点击Next即可完成安装. Python解释