python - 为什么 flask 的 jsonify 方法很慢?

标签 python json performance api flask

我正在 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/

相关文章:

python - 基于 1 个条件的新列使用索引和一列 groupby

Python-获取字符前后的字符串

json - 如何过滤位于 [ 和 ] 内的零件?

javascript - ajax jquery json 返回 500 内部服务器错误(未定义),但 webmethod 有效

python - networkx 和 igraph 之间的接口(interface)

python - pip install google-cloud-pubsub 在 docker 容器中安装失败

javascript - 将字符串清理为 JSON

python - 基于Pandas系列高效计算差分矩阵

.net - 计算CPU使用率: Code improvement

iOS SnapKit 在呈现 View 上的性能