use*_*419 1 python-3.x python-asyncio aiohttp
以前,我用于asyncio.wait_for超时控制,效果很好。最近,我学习了aiohttp软件包,发现它用于asyncio_timeout.timeout超时控制。然后我阅读了asyncio_timeout 的github页面(https://github.com/aio-libs/async-timeout)。作者声称它运行的速度比快asyncio.wait_for。所以我有两个问题:
asyncio_timeout.timeout完全取代asyncio.wait_for吗?我是否应该全部更换asyncio.wait_for以提高速度?我正在编写一个websocket客户端,asyncio.wait_for当前控制websocket.recv它被频繁调用。asyncio_timeout.timeout应该将其与一起使用async with。但是,在aiohttp帮助页面中,它们with代替async with(http://aiohttp.readthedocs.io/en/stable/)使用。那么哪一个是正确的呢?asyncio_timeout.timeout快于asyncio.wait_for,是。
wait_for创建一个新任务。对于应用程序代码而言可能并不重要,但对于库而言就足够了。例如asyncpg尝试使用wait_for但为了速度而拒绝。asyncio_timeout可以用在除其他地方以外的其他地方tornado.web.RequestHandler.get。龙卷风仍然不支持任务取消,我希望它会在龙卷风5.0中修复async_timeout.timeout可工作在async with公正with。人们with多次被陈述所迷惑:在asyncio世界上鼓励异步操作。这就是为什么我添加了异步上下文管理器支持并鼓励这种用法。with为了向后兼容,它将长期得到支持-我只是不鼓励使用这种语法。