Python: async with

 

复制代码
import asyncio
import sys


class AsyncContextManager:
    async def __aenter__(self):
        return self

    async def __aexit__(self, exc_type, exc_val, exc_tb):
        print(exc_type, exc_val, exc_tb)
        return True


# async with AsyncContextManager() as acm:
#     print(acm)

async def main():
    # async with AsyncContextManager() as acm:
    #     print(acm)
    #     raise TimeoutError
    acm = AsyncContextManager()
    aenter = type(acm).__aenter__(acm)
    try:
        print(await aenter)
        raise TimeoutError
    except:
        if not await type(acm).__aexit__(acm, *sys.exc_info()):
            raise
    else:
        await acm.__aexit__(*sys.exc_info())


with asyncio.Runner(debug=True) as runner:
    runner.run(main())
复制代码

 

posted @   ascertain  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-06-06 linux network
2020-06-06 systemd-logind.service
2020-06-06 详细讲解linux内核参数arp_announce和arp_ignore
点击右上角即可分享
微信分享提示