我正在尝试创建一种通用方法来测量大多数“硬”功能的执行时间。
为此,我希望创建一个类似于以下内容的装饰器:
def timeit(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
logger.info(f"Execution time for {func.__name__} is {time.time() - start} seconds")
return result
return wrapper
@timeit
async def some_func():
# Function body
这里的主要问题是-此代码是同步的,效果不是很好。
我也试图做类似的事情:
def timeit():
def wrapper(func):
@wraps(func)
async def wrapped(*args, **kwargs):
start = time.time()
logger.info(f"Starting {func.__name__}...")
return await func(*args)
end = time.time() - start
logger.info(f"Completed {func.__name__} in {} seconds")
return wrapped
return wrapper
这里有一些问题:
1)start
时间不完全是开始时间,而是函数已添加到异步循环的时间
2)由于return
语句,我不会获得有关完成功能的信息。
为避免此项目,我可能尝试使用run_until_complete
,但不确定这种装饰器是否可以使用。
我在Google上搜索了很多,但是找不到用于衡量执行时间的通用方法。
我们如何测量执行时间并将此信息提供到日志中以便于调查/调试?