tornado.httpclient.HTTPError:HTTP 599:请求队列问题超时

时间:2016-11-10 03:43:11

标签: tornado

我正在使用Tornado的Async http客户端使用etcd创建异步屏障库。我想将获取http请求的超时更改为大于默认值20秒。我使用request_timeout = 120和connect_timeout = 120来增加与提取相关的超时。但是我仍然会在默认的20秒后抛出龙卷风抛出异常:

tornado.httpclient.HTTPError: HTTP 599: Timeout in request queue
ERROR:tornado.access:500 GET /a (::1) 22684.49ms

我确实读过Ben在7月2日提到的有错误的地方:

https://github.com/tornadoweb/tornado/issues/1753

但是我认为增加连接和请求超时会修复这个问题?这还是一个突出的bug吗?最新版本是2016年10月1日

1 个答案:

答案 0 :(得分:1)

对于SimpleHTTPClient,在请求队列中花费的时间仍会计入超时。您的错误消息只是说:

tornado.httpclient.HTTPError: HTTP 599: Timeout in request queue
                                        ^^^^^^^^^^^^^^^^^^^^^^^^

这是一个有意识的设计选择,所以你可以让Tornado不通过继承SimpleAsyncHTTPClient并省略该代码来做到这一点:

from tornado.httpclient import AsyncHTTPClient
from tornado.simple_httpclient import SimpleAsyncHTTPClient
from tornado.log import gen_log

class NoQueueTimeoutHTTPClient(SimpleAsyncHTTPClient):
    def fetch_impl(self, request, callback):
        key = object()

        self.queue.append((key, request, callback))
        self.waiting[key] = (request, callback, None)

        self._process_queue()

        if self.queue:
            gen_log.debug("max_clients limit reached, request queued. %d active, %d queued requests." % (len(self.active), len(self.queue)))


AsyncHTTPClient.configure(NoQueueTimeoutHTTPClient)