- 3.4.4. 异步上下文管理器
3.4.4. 异步上下文管理器
异步上下文管理器 是 上下文管理器 的一种,它能够在其 aenter
和 aexit
方法中暂停执行。
异步上下文管理器可在 async with
语句中使用。
object.
aenter
(self)在语义上类似于
enter()
,仅有的区别是它必须返回一个 可等待对象。object.
aexit
(self, exc_type, exc_value, traceback)- 在语义上类似于
exit()
,仅有的区别是它必须返回一个 可等待对象。
异步上下文管理器类的一个示例:
- class AsyncContextManager:
- async def __aenter__(self):
- await log('entering context')
- async def __aexit__(self, exc_type, exc, tb):
- await log('exiting context')
3.5 新版功能.
脚注
- 1
在某些情况下 有可能 基于可控的条件改变一个对象的类型。 但这通常不是个好主意,因为如果处理不当会导致一些非常怪异的行为。
2
hash()
,iter()
,reversed()
以及contains()
方法对此有特殊处理;其他方法仍会引发TypeError
,但可能依靠None
属于不可调用对象的行为来做到这一点。3
这里的“不支持”是指该类无此方法,或方法返回
NotImplemented
。 如果你想强制回退到右操作数的反射方法,请不要设置方法为None
— 那会造成显式地 阻塞 此种回退的相反效果。4
- 对于相同类型的操作数,如果非反射方法 (例如
add()
) 失败则会认为相应运算不被支持,这就是反射方法未被调用的原因。