jsonify在我的烧瓶应用中花费了太多时间

时间:2015-01-07 10:44:49

标签: python json rest flask

我有一个烧瓶安息的api,对于一个简单的请求,它可能需要5到30秒才能响应。

使用分析器,我看到在jsonify调用中使用了大量时间:

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000   24.112   24.112  my_api.py:72(decorated_function)
    1    0.000    0.000   24.109   24.109  checkSystem.py:11(decorated_function)
    1    0.019    0.019   24.109   24.109  __init__.py:521(decorated_function)
    1    0.007    0.007   24.066   24.066  my_api.py:135(get)
    1    0.000    0.000   20.960   20.960  json.py:201(jsonify)
    1    0.000    0.000   20.960   20.960  json.py:114(dumps)
    1    0.024    0.024   20.960   20.960  __init__.py:274(dumps)
    1    1.215    1.215   20.936   20.936  encoder.py:248(encode)
2142307/2043811    2.736    0.000   19.689    0.000 encoder.py:600(_iterencode)
7781216/2043811   10.640    0.000   17.306    0.000 encoder.py:513(_iterencode_dict)
2166915/2043795    2.840    0.000   12.561    0.000 encoder.py:424(_iterencode_list)
    1    0.109    0.109    3.099    3.099  historyDao.py:4(getHistory)
2142370    1.516    0.000    1.516  0.000  {isinstance}
.......

你可以看到我在DAO中也花了3秒钟,因为我的数据集不是那么小。

我可以看到编码器脚本有很多调用,但我只调用jsonify一次,所以我真的不知道如何减少它。 你知道jsonify如此长久吗?

如果它有帮助,这是一个回应的例子:

{
"stationHistory": {
"features": [
  {
    "geometry": {
      "coordinates": [
        45.75118,
        4.884795
      ],
      "type": "Point"
    },
    "id": "3079",
    "properties": {
      "RGB": "rgb(0,96,160)",
      "address": "address",
      "banking": 1,
      "bikes": 3,
      "extra": "\"extra\"",
      "free_slots": 13,
      "last_update": "1420625383000",
      "movable": 0,
      "name": "3079 - PLACE LOUISE",
      "status": 1,
      "tms_gmt": "Wed, 07 Jan 2015 10:15:03 GMT",
      "total_slots": 0
    },
    "type": "Feature"
    }
],
"type": "FeatureCollection"
}
}

当然还有更多功能。我没有"递归" json,有很多词典进入其他词典。所以我无法解释通话次数。

我会试着展示一些代码。

我有一个简单的烧瓶安息应用程序,没什么特别的,这是一个示例类:

class Historic(restful.Resource):
    @somewrappers
    @cache.memoize(60)
    def get(self, some_args):
        parser = MyParser()
        parser.add_argument('arg1', type=int, help="Can't read arg1")
        args = parser.parse_args()
        historic = historyDao.getHistory(
            currentConnection,
            some_args,
            args.get('arg1', None),
        )
        return jsonify(historic) 

我的dao执行一个sql请求,没问题,并以geojson格式存储结果:

featureList = []
for station in data:
    station['RGB'] = utils.getRGB(station, system)
    featureList.append(utils.createFeature(station))
featureCollection = utils.createFeatureCollection(featureList)
response_dict = {'stationHistory' : featureCollection}
return response_dict
来自utils模块的

函数只是添加额外的geojson东西,"特性:","属性:",你可以在json示例中看到结果

0 个答案:

没有答案