【问题标题】:It there any default asynchronious null context manager in python3.7+?python3.7+中是否有任何默认的异步空上下文管理器?
【发布时间】:2020-04-28 11:24:02
【问题描述】:

我想创建可选的异步信号量。
如果asyncio.Semaphore 不支持None 值,我决定创建asyncio.Semaphore,如果指定了连接限制,否则 - 某种虚拟对象
有一个contextlib.nullcontext,但它只支持同步with
我已经创建了自己的假人:

@contextlib.asynccontextmanager
async def asyncnullcontext():
    yield None

是否有任何默认的异步空上下文管理器?

【问题讨论】:

    标签: python-3.7 python-asyncio


    【解决方案1】:

    是否有任何默认的异步空上下文管理器?

    您可以使用contextlib.AsyncExitStack()

    ExitStack() 是在引入nullcontext 之前创建一个快速而肮脏的空上下文管理器的类似方法。

    【讨论】:

    • 它看起来像是某种误用,但完全符合我的要求
    • @Trizalio 我认为滥用这个词太强了,但我同意它有点神秘。有趣的事实:大约十年前,我是 originally propose 向标准库添加空上下文管理器的人。它花了 7 年的时间和许多不同的人的说服才真正进入。也许你有一个 asyncnullcontext 会更好? :)
    • @Trizalio 看来nullcontext 将在 python 3.10 中支持async with,仅供参考。见this bug。 @user4815162342 我想这些天事情进展得更快了:)
    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多