假设我们有两个异步上下文管理器,它们通常以嵌套方式一起使用,但通常只有第二个的结果在正文中使用。例如,如果我们发现自己经常输入以下内容:

async with context_mgr_1() as cm1:
    async with cm2.context_mgr_2() as cm2:
        ...do something with cm2...

我们如何创建一个嵌套这些上下文管理器的单个上下文管理器,以便我们可以这样做:
async with context_mgr_2() as cm2:
    ...do something with cm2...

contextlib.nested 用于为非异步上下文管理器完成此操作,但我在 asyncio 中找不到这样的帮助程序。

最佳答案

凯文的回答没有遵循 3.5.2 中的 contextlib.ExitStack impl,所以我已经继续根据 python 3.5.2 中的官方 impl 创建了一个。如果我发现任何问题,我会更新 impl。

github 要点链接:https://gist.github.com/thehesiod/b8442ed50e27a23524435a22f10c04a0

关于python-asyncio - 如何在 Python 3 中嵌套异步上下文管理器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38646999/

10-12 18:37