瓶子返回的反应非常缓慢

时间:2019-01-14 15:32:21

标签: python web bottle

我已经创建了两种从路由装饰函数之一返回的方法:

方法1:

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非常快速地返回到调用方客户端(客户端通过POST请求使用请求库)。

方法2的速度要慢大约10倍(呼叫客户端等待大约2分钟才能获得响应,而方法1则为2秒)。

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

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

1 个答案:

答案 0 :(得分:1)

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

return [myBody]

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


问:为什么我返回一个列表(包含单个字符串)而不是仅返回字符串?

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

  

应用程序必须返回可迭代的屈服字节字符串。您可能会返回一个字符串(因为字符串是可迭代的),但这会导致大多数服务器逐个char传输内容。