首页 > 解决方案 > python函数对通用代码执行计时并将其写入日志文件

问题描述

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

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 分钟解决方案更好的问题,其次因为我必须处理这个函数的返回......它返回什么?以及如何传递我想要运行的整段代码?我很困惑,看起来有人已经为此编写了一些装饰器......

标签: loggingtiming

解决方案


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))

推荐阅读