3.4.4. 异步上下文管理器

异步上下文管理器上下文管理器 的一种,它能够在其 aenteraexit 方法中暂停执行。

异步上下文管理器可在 async with 语句中使用。

  • object.aenter(self)
  • 在语义上类似于 enter(),仅有的区别是它必须返回一个 可等待对象

  • object.aexit(self, exc_type, exc_value, traceback)

  • 在语义上类似于 exit(),仅有的区别是它必须返回一个 可等待对象

异步上下文管理器类的一个示例:

  1. class AsyncContextManager:
  2. async def __aenter__(self):
  3. await log('entering context')
  4.  
  5. async def __aexit__(self, exc_type, exc, tb):
  6. await log('exiting context')

3.5 新版功能.

脚注

  • 1
  • 在某些情况下 有可能 基于可控的条件改变一个对象的类型。 但这通常不是个好主意,因为如果处理不当会导致一些非常怪异的行为。

  • 2

  • hash(), iter(), reversed() 以及 contains() 方法对此有特殊处理;其他方法仍会引发 TypeError,但可能依靠 None 属于不可调用对象的行为来做到这一点。

  • 3

  • 这里的“不支持”是指该类无此方法,或方法返回 NotImplemented。 如果你想强制回退到右操作数的反射方法,请不要设置方法为 None — 那会造成显式地 阻塞 此种回退的相反效果。

  • 4

  • 对于相同类型的操作数,如果非反射方法 (例如 add()) 失败则会认为相应运算不被支持,这就是反射方法未被调用的原因。