来自python 3.4的新手开发者。
我天真的理解只是在我看到协程是一个上下文管理器时使用关键字async with
?
答案 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__
协程。