计算类执行时间的装饰器:
def __recordTimeClass(aClass):
class newClass():
def __init__(self):
self.CS_T = datetime.datetime.now()
self.wrapped= aClass()
self.CE_T = datetime.datetime.now()
def __scrDownload(self,url, minionid):
S_T=datetime.datetime.now()
results=self.wrapped.__scrDownload(url, minionid)
E_T=datetime.datetime.now()
return results
def executeScripts(self, params):
S_T = datetime.datetime.now()
a,b,c = self.wrapped.executeScripts(params)
E_T = datetime.datetime.now()
return a,b,c#,S_T,E_T
return newClass
计算普通函数执行时间的装饰器:
1 2 3 4 5 6 7 8 9 10 11 12 | def __recordTime(): ''' record the run time of a function ''' def resFunc(func): def _resFunc( * args, * * kwargs): S_T = datetime.datetime.now() results = func( * args, * * kwargs) E_T = datetime.datetime.now() return results #,S_T,E_T return _resFunc return resFunc |
使用类装饰器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @__recordTimeClass class __TryParams(): def __init__( self ): self .failure_minions = {} self .success_minions = {} self .script_lists = [] self .download_script_lists = [] def executeScripts( self ,params): ''' :param: params{"url":"","minionid":"","parameter":{}} :return: ''' global OPT_PATH a = b = c = 1 return a,b,c |
使用函数装饰器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @__recordTime () def __readScript(file_path): ''' #!# exec_module.py get the destination path to save the script file ''' lists = [] try : with open (file_path, 'r' ) as f: lines = f.readlines() for i in range ( 0 , len (lines)): if lines[i].startswith( "#!# need" ): lists.append(lines[i]) except IOError,e: log.debug(e) return None return lists |
重要的在于灵活运用,比如
1 | S_T,E_T这两个全局变量,用在类装饰器里,就可以算一个总共运行时间或记录某几个方法执行的时间总和,从而分析性能瓶颈在哪 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· 盘点!HelloGitHub 年度热门开源项目
· DeepSeek V3 两周使用总结
· 02现代计算机视觉入门之:什么是视频
· C#使用yield关键字提升迭代性能与效率
· 2. 什么?你想跨数据库关联查询?