如何让修饰器测量异步函数的执行时间?
以下是一个测量函数执行时间的修饰器
代码来自《流畅的Python》,有略微改动。
DEFAULT_FMT = '[{elapsed:0.7f}ms] {name}({args}) -> {result}'
def clock(fmt=DEFAULT_FMT):
def decorate(func):
@functools.wraps(func)
def clocked(*_args):
t0 = time.time()
_result = func(*_args)
elapsed = time.time() - t0
elapsed *= 1000
name = func.__name__
args = ', '.join(repr(arg) for arg in _args)
result = repr(_result)
print(fmt.format(**locals()))
return _result
return clocked
return decorate
这个修饰器对于同步函数执行良好,但对于异步函数,并且使用 asyncio 执行异步的时候无法正常工作,测量的时间总为零。如何解决此问题?
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(...))
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论