你好吗?
最近几天我经历了这个麻烦,我似乎无法完全理解tornado gen库。
我有这段代码,作为示例:
@gen.coroutine
def get(self, build_id=None):
status_query = self.get_query_arguments("status")
limit_query = self.get_query_arguments("limit")
results = [self._dummy() for i in range(15)]
yield results
def _dummy(self):
http_client = tornado.httpclient.AsyncHTTPClient()
return http_client.fetch("https://www.google.com", headers=self.headers, validate_cert=False)
正如我所想,我的 15 个获取 google 的请求应该几乎同时触发。 “结果”列表,应该是一个 future 列表,然后,生成列表应该等待所有这些都完成。
这实际上正在发生,但发出这些请求大约需要 6 秒,并且随着我增加 for 循环的范围,它会逐渐增长。
他们不应该花大约相同的时间来准备吗?
我错过了什么吗?
非常感谢!
最佳答案
AsyncHTTPClient 的默认 max_clients 为 10。当您发起 15 个请求时,其中 10 个会立即开始,但其余 5 个必须等待其他请求完成才能开始。要开始更多并发请求,请将 max_clients 提高到更大的数字。 See Tornado's documentation for details on configuring AsyncHTTPClient.
关于python - AsyncHTTPClient 阻止我的 Tornado IOLoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38379630/