账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何让修饰器测量异步函数的执行时间?
    53
    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(...))
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部