【问题标题】:python function to perform timing on generic code and write it to log filepython函数对通用代码执行计时并将其写入日志文件
【发布时间】:2020-08-05 13:23:30
【问题描述】:

每次我想记录运行某些代码需要多长时间时,我都会按以下方式包装代码

logger.info('Running   <MYCODE>' )
start_time = time.time()
 <MYCODE>
logger.info("--- %s seconds ---" % (time.time() - start_time))
   

这使得代码非常非常不可读,非常非常快。

我知道 %timeit 的事情,但我认为它在这里不适用,因为我想记录并且因为我不想运行它 N 次以获得差异或类似的东西。

我在想我应该定义一个函数

def timing ( <MYCODE> ):
    logger.info('Running   <MYCODE>' )
    start_time = time.time()
    <MYCODE>
    logger.info("--- %s seconds ---" % (time.time() - start_time))

但我不确定这是个好主意。首先,因为看起来很多人已经遇到并解决了比我的 5 分钟解决方案更好的问题,其次因为我必须处理这个函数的返回......它返回什么?以及如何传递我想要运行的整段代码?我很困惑,看起来有人已经为此编写了一些装饰器......

【问题讨论】:

    标签: logging timing


    【解决方案1】:
    import time
    import inspect
    
    def timed(f:callable):
        start = time.time()
        ret = f()
        elapsed = 1000*(time.time() - start)
        source_code=inspect.getsource(f).strip('\n') 
        logger.info(source_code+":  "+str(elapsed)+" seconds")
        return ret
    

    可以使用

    a = timed(lambda: np.sin(np.pi))
    

    【讨论】:

      猜你喜欢
      • 2023-01-14
      • 1970-01-01
      • 2010-12-21
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多