我正在使用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日
答案 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)