我正在 flask 中编写一个返回 json 的 API。每个 flask 函数的形式都是
from flask import jsonify
@app.route('/getdata')
def get_data():
data = load_data_as_dict()
return jsonify(data)
如果我返回大量数据,调用此函数大约需要 1.7 秒。但是,如果我这样做:
from flask import Response
@app.route('/getdata')
def get_data():
data = load_data_as_dict()
data_as_str = json.dumps(data)
return Response(response=data_as_str, status=200, mimetype="application/json"
...函数在大约 0.05 秒内完成。
谁能告诉我为什么 jsonify
这么慢?返回原始 Flask 响应有什么问题吗?
最佳答案
我的猜测是:它与缩进和制作 pretty
json 转储有很大关系。这是方法定义(我去掉了注释以节省空间,完整代码可以在 here 中找到):
def jsonify(*args, **kwargs):
indent = None
separators = (',', ':')
if current_app.config['JSONIFY_PRETTYPRINT_REGULAR'] and not request.is_xhr:
indent = 2
separators = (', ', ': ')
if args and kwargs:
raise TypeError('jsonify() behavior undefined when passed both args and kwargs')
elif len(args) == 1: # single args are passed directly to dumps()
data = args[0]
else:
data = args or kwargs
return current_app.response_class(
(dumps(data, indent=indent, separators=separators), '\n'),
mimetype=current_app.config['JSONIFY_MIMETYPE']
)
如果模块可用,dumps
包装 simplejson.dumps
,否则使用 json.dumps
。
关于python - 为什么 flask 的 jsonify 方法很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37931927/