Python asynchronous context managers很有用,但它们do not workasyncio.wait_for Timeouts一起使用。

将超时添加到异步上下文管理器的最佳方法是什么?

最佳答案

将超时添加到异步上下文管理器的最佳方法是什么?


您不能将wait_for应用于异步上下文管理器,但是可以将其应用于使用它的协程。因此,要将超时添加到上下文管理器,请在异步函数中使用它,然后将超时应用到它。例如:

async def download(url, session):
    async with session.get(url) as resp:
        return await resp.text()

async def print_google(session):
    try:
        text = await asyncio.wait_for(download('http://www.google.com', session), 1)
    except asyncio.TimeoutError:
        text = None
    print(text)

07-24 09:45