python异步上下文管理器

时间:2018-01-22 22:04:02

标签: python asynchronous contextmanager

在Python Lan Ref。 3.4.4,据说[Route("api/Stripe")] [HttpPost] public async Task<IActionResult> Post() __aenter__()必须返回等待物。但是,在示例异步上下文管理器中,这两个方法返回None:

__aexit__()

这段代码是否正确?

2 个答案:

答案 0 :(得分:2)

此示例中的方法不返回None。它们是async函数,它们自动返回(等待)异步协同程序。这类似于生成器函数返回生成器迭代器的方式,即使它们通常没有return语句。

答案 1 :(得分:2)

您的__aenter__方法必须返回上下文。

class MyAsyncContextManager:
    async def __aenter__(self):
        await log('entering context')
        # maybe some setup (e.g. await self.setup())
        return self

    async def __aexit__(self, exc_type, exc, tb):
        # maybe closing context (e.g. await self.close())
        await log('exiting context')

    async def do_something(self):
        await log('doing something')

用法:

async with MyAsyncContextManager() as context:
    await context.do_something()