导航

 

计算类执行时间的装饰器:

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

计算普通函数执行时间的装饰器:

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

使用类装饰器:

@__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

使用函数装饰器:

@__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

重要的在于灵活运用,比如

S_T,E_T这两个全局变量,用在类装饰器里,就可以算一个总共运行时间或记录某几个方法执行的时间总和,从而分析性能瓶颈在哪

 

posted on 2016-05-05 09:29  slqt  阅读(367)  评论(0编辑  收藏  举报