首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >asyncio.wait_for()的用途

asyncio.wait_for()的用途
EN

Stack Overflow用户
提问于 2017-07-21 00:51:59
回答 1查看 12.2K关注 0票数 10

据我所知,从协程中的协程中得到的让步会将线程控制传递给事件循环。

然后,事件循环在其他协程之间进行某种类型的调度(其中包括从中产生的协程),并且在某个时刻,将恢复调用的协程。

这与将协程包装在ansyncio.wait_for调用中并从后一个调用中让步有什么不同?

EN

回答 1

Stack Overflow用户

发布于 2017-07-21 03:58:53

wait_for会添加超时。例如,从网络检索数据的时间太长(让我们用异步睡眠模拟它),更糟糕的是,您最终可能只会出现错误。

代码语言:javascript
运行
复制
@coroutine
def fetch_data():
    yield from asyncio.sleep(100000)
    raise Exception('No data')

然后,普通的让出将等待100000秒,以使用户什么也得不到

代码语言:javascript
运行
复制
data = yield from fetch_data() 

另一方面,wait_for增加了时间限制:

代码语言:javascript
运行
复制
data = yield from wait_for(fetch_data(), 5)

它将只等待5秒,然后返回数据或引发TimeoutError。当然,这样的超时是一把双刃剑。

wait_for只是一般情况下的实现,并没有什么特别之处。

async/await更新

现在,使用较新的async/await语法,上面的示例将如下所示:

代码语言:javascript
运行
复制
async def fetch_data():
    await asyncio.sleep(100000)
    raise Exception('No data')

data = await fetch_data()

如果你想在有时间限制的情况下等待它:

代码语言:javascript
运行
复制
data = await asyncio.wait_for(fetch_data(), 5)
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45220783

复制
相关文章

相似问题

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