tornado多并发下http client connection timed out 分析及解决

tornado的http client有个max_clients设置,用来设置使用该client的最大并发请求数量。

请求的timeout有两个设置参数,connect_timeout request_timeout  单位秒

前者设置连接目标主机超时时间,后者设置请求下载超时时间

实际使用中设置 connect_timeout=2 发现,有很多connection timed out ,而且目标都是正常可访问的

由 getting many HTTP 599 errors for valid urls 和 Queue and Semaphore example - a parallel web spider 启发

猜测 实际由于connection timeout 从 fetch调用就开始计时,而由于max_clients限制,导致多余请求等待而触发connection timed out 错误。

结果就是connect_timeout参数在并发下并没有达到预期的目的。预期是设置连接目标主机超时时间,结果改时间还包含了等待前面并发完成的时间。

该猜测需要在timeout 错误出现时打印当前并发量来验证。

 

解决方案:1、如果为了成功获取,去掉timeout,可以尝试增大max_clents。

     2、如果为了connect_timeout 必定达到预期效果,需要借助单独的请求queue和semaphore来控制真正进入connect timeout计时的请求数量小于 max_clients。

posted @ 2017-05-31 15:58  zephor  阅读(1243)  评论(1)    收藏  举报