zoukankan      html  css  js  c++  java
  • 【Python】模块学习之(__call__)实现准确计算函数运行时间

    背景

    博主在写自动化的过程中,有遇到有的用例运行缓慢的问题,想起在上一家公司的的“自动化工厂”有一个指标:两小时内运行完所有的用例才算合格。所以想计算每一个用例的运行时间。

    思路

    因为使用的POM模型,每一个用例都是一个函数,所以实际需要得到的是函数运行的时间

    在每一个函数运行开始的时候打一个标记,结束的时候打一个标记可以得到结果,但是比较麻烦,所以想到了装饰器

    所有的函数都是可调用对象。使用__call__()函数可以将一个类实例变成一个可调用对象

    在使用装饰器的时候,遇到了各种问题,都已经一一解决,最终代码如下:

    import time
    from logging_save import logger
    
    
    class time_count(object):
        def __init__(self):
            pass
    
        def __call__(self,func):
            def _call(*args, **kw):
                begintime = time.clock()
                func(*args, **kw)
                end_time = time.clock()
                runtime = end_time -begintime
                logger.info('ran %s cost %.3f s' % (func.__name__, runtime))
            return _call
    
    
    class bss(object):
    
        @time_count()  # 直接进行调用 
        def runfunc(self):
            time.sleep(3)
            print 'runfunc running'
    
    bs = bss()
    bs.runfunc()
  • 相关阅读:
    安装django时出错
    mysql ------python3(一)笔记
    安装mysql的具体过程
    Python3web框架---Django、Tornado、Flask的对比
    python3-----json函数
    图片人脸识别年龄和性别
    urllib库的使用(三)-----python3 异常处理
    python 3 基础篇 (一)
    requests,pymysql,django的安装
    求素数方法的改进
  • 原文地址:https://www.cnblogs.com/Detector/p/7746798.html
Copyright © 2011-2022 走看看