作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们有两个异步上下文管理器,它们通常以嵌套方式一起使用,但通常只有第二个的结果在正文中使用。例如,如果我们发现自己经常输入以下内容:
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...
最佳答案
由于 Python 3.7 有 contextlib.AsyncExitStack :
async with AsyncExitStack() as stack:
cm1 = await stack.enter_async_context(context_mgr_1())
cm2 = await stack.enter_async_context(context_mgr_2())
# ...do something with cm2...
async with AsyncExitStack() as stack:
connections = [await stack.enter_async_context(get_connection())
for i in range(5)]
# All opened connections will automatically be released at the end of
# the async with statement, even if attempts to open a connection
# later in the list raise an exception.
async with AsyncExitStack() as stack:
cm1 = await stack.enter_async_context(context_mgr_1())
f = stack.enter_context(open('file.txt'))
cm2 = await stack.enter_async_context(context_mgr_2())
# ...
关于python-asyncio - 如何在 Python 3 中嵌套异步上下文管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38646999/
我是一名优秀的程序员,十分优秀!