python - AsyncHTTPClient 阻止我的 Tornado IOLoop

标签 python tornado coroutine

你好吗?

最近几天我经历了这个麻烦,我似乎无法完全理解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/

相关文章:

android - 为什么在生命周期范围内 fragment 的上下文为空

c++ - 在 C++20 中调试协程

python - 将系列分类到 Pandas 的新列

python - 将字符串与数字进行比较,解码 radio 呼号

python - 无法让 SSL 在 Tornado 上工作

linux - 为什么 "pip install tornado"没有安装tornado模块?

python-3.x - 如何在 Tornado 上获取favicon.ico工作

python - 如何在 Python 中将双反斜杠替换为单个字节字符串

python - 找不到 scrapyd-client 命令

android - Kotlin协程,有没有更好的方法来返回这个值?