asyncio.wait_for()的目的

时间:2017-07-20 16:51:59

标签: python-3.4 python-asyncio coroutine

据我了解,从协程中的协程产生的传递将线程控制传递给事件循环。

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

与在ansyncio.wait_for调用中包装协程以及从后者产生的协议有什么不同?

1 个答案:

答案 0 :(得分:4)

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

@coroutine
def fetch_data():
    yield from asyncio.sleep(100000)
    raise Exception('No data')

然后普通收益会等待100000秒,为用户取得任何东西

data = yield from fetch_data() 

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

data = yield from wait_for(fetch_data(), 5)

它只会等待5秒,并且会返回数据或引发TimeoutError。当然这样的超时是双刃剑。

wait_for是常见案例的实现,没什么特别的。