在 asyncio 的 streams 中设置超时

在 asyncio 的 streams 中设置超时

  asyncio 的流是高层级原语。使用流可以简化 TCP socket 编程,并可以提高并发连接的性能。
   但开始使用时,我们发现,它的读写操作方法中,均没有超时的参数。例如,如果对方不发送信息,StreamRead 的 read 就会一直等下去。StreamRead 和 StreamWriter 类中,也没有 xxx_nowait 之类的非阻塞操作方法。StreamWriter 的 write 方法是个不等待的同步方法,但一般要使用 drain 来等待写的结束,这也是一个异步阻塞的方法。
   其实用惯了asyncio后就会发现,asyncio 的超时处理是用 wait_for方法实现的,例如,你可以将:

data = await reader.read(100)

改为:

data = await asyncio.wait_for(reader.read(100), timeout=4)

就可以实现超时退出了,上面的例子是等待4秒收不到数据就退出。
   应当注意的是:超时以后,并不是直接中断语句的执行,转向下一句,而是抛出 TimeoutError 异常。如果需要程序继续运行下去,就要用 try … except 捕捉和处理这个异常。
   这个办法对其他用 async def 定义的方法的执行也是有效的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值