在使用asyncio.wait_for时,必须注意它只会在等待的future对象超时时才触发超时。因此,如果在等待的future对象不会超时,那么wait_for函数将永远不会超时。如果需要在一定时间内强制等待某个任务,可以使用asyncio.wait方法,并将timeout参数传递给它,如下所示:
import asyncio
async def coro():
await asyncio.sleep(2)
async def main():
task = asyncio.ensure_future(coro())
try:
await asyncio.wait_for(task, timeout=1)
except asyncio.TimeoutError:
print('Timeout!')
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
在上面的示例中,我们在coro协程中等待2秒钟,并使用asyncio.wait_for在main协程中等待task任务完成。但是,这里的超时时间为1秒钟,因此会引发TimeoutError。