代码之家  ›  专栏  ›  技术社区  ›  user1008636

返瓶反应非常缓慢

  •  0
  • user1008636  · 技术社区  · 5 年前

    我创建了两种不同的返回路径装饰功能:

    方法1:

    return HTTPResponse(status=200, body=myBody)
    

    方法2(现在这样做是为了让after请求钩子读取相同的响应对象):

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

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

    我的问题是: 方法1返回到调用客户机非常快(客户机通过POST请求使用请求库)。

    方法2的速度大约慢10倍(调用客户机等待约2分钟以获得响应,而方法1则为2秒)。

    我也有残疾 after_hook 只是为了隔离其他影响的逻辑。

    有什么可能是根本原因的提示吗?

    1 回复  |  直到 5 年前
        1
  •  1
  •   ron rothman    5 年前

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

    return [myBody]
    

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


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

    我们可以 return myBody 但是 return [myBody] 优先考虑。 Here's why :

    应用程序必须返回一个可ITerable并生成字节字符串。您可以返回一个字符串(因为字符串是不可更改的),但这会导致大多数服务器逐字符传输您的内容。