如何让修饰器测量异步函数的执行时间?

发布于 2022-09-06 20:08:24 字数 906 浏览 23 评论 0

以下是一个测量函数执行时间的修饰器

代码来自《流畅的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文