python3.6,async with和await之间的区别



来自Python 3.4的新手开发人员。

我的天真理解是,当我看到协程是上下文管理器时,只使用关键字async with

来自 PEP 492:

提出了异步上下文管理器的新语句:

async with EXPR as VAR:
    BLOCK

这在语义上等效于:

mgr = (EXPR)
aexit = type(mgr).__aexit__
aenter = type(mgr).__aenter__(mgr)
VAR = await aenter
try:
    BLOCK
except:
    if not await aexit(mgr, *sys.exc_info()):
        raise
else:
    await aexit(mgr, None, None, None)

所以是的 - 它屈服于从给定上下文管理器的__aenter__方法返回的协程,一旦返回就运行你的块,然后屈服于__aexit__协程。

最新更新