首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >async_timeout.timeout对asyncio.wait_for

async_timeout.timeout对asyncio.wait_for
EN

Stack Overflow用户
提问于 2017-10-29 13:32:24
回答 1查看 3.5K关注 0票数 1

以前,我使用asyncio.wait_for进行超时控制,它运行得很好。最近,我学习了aiohttp包,发现它使用asyncio_timeout.timeout作为超时控制。然后我阅读了asyncio_timeout的github页面(Asyncio_timeout)。提交人声称它比asyncio.wait_for跑得更快。所以我有两个问题:

  1. asyncio_timeout.timeout能完全取代asyncio.wait_for吗?我应该替换所有的asyncio.wait_for来提高速度吗?我正在编写一个websocket客户端,asyncio.wait_for目前控制着经常调用的websocket.recv
  2. 在“使用示例”部分(https://github.com/aio-libs/async-timeout)中,asyncio_timeout.timeout似乎应该与async with一起使用。但是在aiohttp帮助页面中,他们使用的是with而不是async with (http://aiohttp.readthedocs.io/en/stable/)。那么哪一个是正确的?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-29 19:26:14

  1. asyncio_timeout.timeoutasyncio.wait_for快,是真的。wait_for创建了一个新任务。对于应用程序代码来说,这可能并不重要,但是对于库来说,这已经足够了。例如,asyncpg试图使用wait_for,但为了速度而拒绝。
  2. asyncio_timeout可以在任何地方使用,除了tornado.web.RequestHandler.get等。龙卷风仍然不支持任务取消,我希望它能在龙卷风5.0中得到修复。
  3. 从技术上讲,async_timeout.timeout既适用于async with,也适用于with。人们曾多次被with语句所迷惑:在asyncio世界中,异步操作是被鼓励的。这就是为什么我添加了异步上下文管理器支持并鼓励这种使用。无论如何,为了向后兼容性,with将被支持很长一段时间--我只是不想鼓励这种语法。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47000770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档