Bottle 返回响应非常慢

Bottle returning responses very slowly

我创建了 2 种不同的从我的路由装饰函数之一返回的方法:

方法一:

return HTTPResponse(status=200, body=myBody)

方法 2(这样做是为了让 after_request 挂钩暂时读取相同的响应对象。):

response = bottle.response.copy()
response.status = 200
response.body = myBody
return response

myBody 是一个字符串,而不是字典(我们的上游库已经通过 json.dumps() 将字典转换为字符串),而且 myBody 也很大:它是一个有 1 个键的字典,但是600+ 成员列表作为值。

我的问题是: 方法 1 returns 对调用客户端非常快(客户端通过 POST 请求使用请求库)。

方法 2 大约慢 10 倍(调用客户端等待大约 2 分钟才能获得响应,而方法 1 中为 2 秒)。

我还禁用了任何 after_hook 逻辑,只是为了隔离任何其他影响。

关于根本原因可能是什么的任何提示?

return 大字符串的最有效(最快)方法是 return 一个可迭代对象。例如,

return [myBody]

特别说明:(1) 不要复制响应对象,(2) 200 是默认响应代码,因此无需指定。


问:为什么我要 return 列表(包含单个字符串)而不只是字符串?

A:我们可以 return myBody,但首选 return [myBody]Here's why:

Applications must return an iterable yielding byte strings. You may return a string (because strings are iterable) but this causes most servers to transmit your content char by char.