python3.6,异步和等待之间的区别

时间:2018-01-21 01:14:17

标签: python-3.x python-3.6 python-asyncio

来自python 3.4的新手开发者。

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

1 个答案:

答案 0 :(得分:3)

来自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__协程。