Python 装饰器,用于显示函数的执行时间
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
在开发高吞吐量、低延迟系统时,测量代码的执行时间至关重要,这有助于识别瓶颈并加以解决。为此,我们将使用装饰器来测量它所装饰的函数的执行时间。
from datetime import timedelta
from functools import wraps
from timeit import default_timer as timer
from typing import Any, Callable, Optional
def metrics(func: Optional[Callable] = None, name: Optional[str] = None, hms: Optional[bool] = False) -> Any:
"""Decorator to show execution time.
:param func: Decorated function
:param name: Metrics name
:param hms: Show as human-readable string
"""
assert callable(func) or func is None
def decorator(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
comment = f"Execution time of {name or fn.__name__}:"
t = timer()
result = fn(*args, **kwargs)
te = timer() - t
# Log metrics
from common import log
logger = log.withPrefix('[METRICS]')
if hms:
logger.info(f"{comment} {timedelta(seconds=te)}")
else:
logger.info(f"{comment} {te:>.6f} sec")
return result
return wrapper
return decorator(func) if callable(func) else decorator
通过向每个函数添加此装饰器,我们可以使用 APM 的分析功能来识别瓶颈,并更好地了解系统。
祝你编程愉快 :D
文章来源:https://dev.to/ahmedeltaweel/python-decorator-to-show-execution-time-of-a-function-afk