python - 使用协程作为装饰器

标签 python python-3.x asynchronous

在这种情况下:

async def foo(f):
    async def wrapper(*args, **kwargs):
        return f(*args, **kwargs)
    return wrapper

@foo
async def boo(*args, **kwargs):
    pass

调用 foo 作为 boo 装饰器的装饰器是异步调用吗?

--第一次编辑: 另外,如何将协同程序的调用链作为装饰器来处理?

最佳答案

感谢@blacknght 的评论,考虑

def foo():
    def wrapper(func):
        @functools.wraps(func)
        async def wrapped(*args):
             # Some fancy foo stuff
            return await func(*args)
        return wrapped
    return wrapper

def boo():
    def wrapper(func):
        @functools.wraps(func)
        async def wrapped(*args):
            # Some fancy boo stuff
            return await func(*args)
        return wrapped
    return wrapper

作为两个装饰器,并且

@foo()
@boo()
async def work(*args):
    pass

由于 foo 包装了 work 协程,关键是 await func(*arg) 在两个装饰器中。

关于python - 使用协程作为装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42043226/

相关文章:

python - 如何将 python 代码转换为 Windows dll

python - 如果多个列上的条件, Pandas 数据框中的新列无法获得预期值基础

javascript - Sentry.io 管理异步 Node.js 服务器上的错误范围/上下文

c# - 如何知道任务是否同步完成?

python - urllib3 中没有默认密码属性?

python - kafka认证与授权

python-3.x - 给定两个音频文件,其中一个是另一个的摘要,是否有一种python方法来查找何时在原始文件中重播该摘要?

python - 等待外部进程初始化的策略

c# - 异步编程 APM 与 EAP

python - Pandas :如何指定起始行以提取数据