python 实现简单的PerformanceCountCallHandler装饰器
2012-12-22 14:31
295 查看
Python的functools模块, 提供了3个有趣函数, partial, update_wrapper 和wraps 。
partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象。
update_wrapper函数,把被封装函数的__name__、__module__、__doc__和 __dict__都复制到封装函数去。
wraps函数,对update_wrapper更进一步封装。
可以利用wraps函数,实现简单的方法拦截机制,来实现自己的PerformanceCountCallHandler,
具体实现:
运行结果
partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象。
update_wrapper函数,把被封装函数的__name__、__module__、__doc__和 __dict__都复制到封装函数去。
wraps函数,对update_wrapper更进一步封装。
可以利用wraps函数,实现简单的方法拦截机制,来实现自己的PerformanceCountCallHandler,
具体实现:
#-*- coding: UTF-8 -*- #------------------------------------------------------------------------------- # Name: 模块2 # Purpose: # # Author: ankier # # Created: 22-12-2012 # Copyright: (c) Ankier 2012 # Licence: <2012~2020> #------------------------------------------------------------------------------- import time from functools import wraps _Cache ={} def PerformanceCountCallHandler(): def _PerformanceCountCallHandler(fun): @wraps(fun) def wrap(args, kw): glos = fun.func_globals package = glos['__package__'] model = glos['__name__'] methodName = fun.func_name timeStart = time.time() result = fun(args, kw) timeEnd = time.time() print 'package:',package,' , model:', model, ' , methodName:',methodName,'. ', timeEnd - timeStart, 's' return result return wrap return _PerformanceCountCallHandler
import time from cacheCallHandler import CacheCallHandler from performanceCountCallHandler import PerformanceCountCallHandler @CacheCallHandler() @PerformanceCountCallHandler() def Sum(xx , yy ): sum = xx + yy print '------sum----- ' time.sleep(10) return sum print Sum(4, 5) print Sum(4, 5)
import time from cacheCallHandler import CacheCallHandler from performanceCountCallHandler import PerformanceCountCallHandler @PerformanceCountCallHandler() @CacheCallHandler() def Sum(xx , yy ): sum = xx + yy print '------sum----- ' time.sleep(10) return sum print Sum(4, 5) print Sum(4, 5)
运行结果
------sum----- file = /root/workspace/study/source/cacheCallHandler/cacheCallHandler.py , method = Sum , performance count (s): 10.0078930855 s 9 file = /root/workspace/study/source/cacheCallHandler/cacheCallHandler.py , method = Sum , performance count (s): 6.8187713623e-05 s 9
相关文章推荐
- Python3实现简单可学习的手写体识别(实例讲解)
- python通过Tkinter库实现的一个简单的文本编辑器代码
- Python实现简单文本字符串处理的方法
- Python学习笔记-Django实现简单增删改查
- Python使用tablib生成excel文件的简单实现方法
- python实现简单爬虫功能
- Python 实现简单的命名合法性检查
- Python实现简单的HTTP服务器
- 学习python之编写简单乘法口诀表实现代码
- Mac配置Python开发环境并实现简单的字符串和整数拼接
- Kmeans 算法理论和Python实现(一)——简单K-Means实现
- Python实现冒泡排序的简单应用示例
- Python实现简单爬虫功能--批量下载百度贴吧里的图片
- 随机森林算法的简单总结及python实现
- Python实现的简单文件传输服务器和客户端
- Python(7)实现一个简单的购物车逻辑
- 如何简单实现接口自动化测试(基于 python)
- python简单实现感知机对偶形式
- kNN算法python实现和简单数字识别
- python实现简单的卷积神经网络CNN案例1:定义CNN网络结构