我正在返回烧瓶api的结果。我正在从elasticsearc获取数据。数据太大。获取20万个数据需要21秒。随着数据的增加,的响应速度变慢
有没有一种方法可以更快或异步地获得响应?
class job_results(Resource):
def get(self):
id = request.args.get('id')
res = job_results_query( id)
return (res)
def job_results_query(id):
response = {"result":{}}
response_query = '{
"size":1000,
"sort":[{"timestamp":{"order":"asc"}}],
"query": {
"query_string": {
"query": "identifier:' + id + ' AND type:response"
}
}
}'
query_result = es.search(index="ab", scroll="1m", body=response_query)
scrollID = query_result['_scroll_id']
scroll_size = query_result['hits']['total']
while scroll_size > 0:
response_query_time = time.time()
for line in query_result['hits']['hits']:
source = line['_source']
a = source['a']
metrics_data = source['metrics_data']
response['result'].setdefault('a', {})
response['result']['a'].setdefault("data",[])
response['result']['a']['data'].append(metrics_data)
query_result = es.scroll(scroll_id=scrollID, scroll="1m")
scrollID = query_result['_scroll_id']
scroll_size = len(query_result['hits']['hits'])
return response
Flask将被阻塞,直到得到结果。因此,您可以选择以不同的方式回答问题(例如,返回挂起操作的ID(,或者使用支持异步操作的框架。Sanic被设计为支持与Flask-like API的异步。