以前,我使用asyncio.wait_for进行超时控制,它运行得很好。最近,我学习了aiohttp包,发现它使用asyncio_timeout.timeout作为超时控制。然后我阅读了asyncio_timeout的github页面(Asyncio_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/)。那么哪一个是正确的?发布于 2017-10-29 19:26:14
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将被支持很长一段时间--我只是不想鼓励这种语法。https://stackoverflow.com/questions/47000770
复制相似问题