асинхронный flask API-ответ - PullRequest
0 голосов
/ 15 апреля 2020

Я возвращаю результат от flask API. я получаю данные из эластичного шва c. данные слишком велики. для получения 200 000 данных требуется 21 сек c. с увеличением данных ответ становится медленнее

есть ли способ получить ответ быстрее или асинхронно?

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

1 Ответ

1 голос
/ 15 апреля 2020

Flask будет блокироваться, пока не получит результат. Таким образом, вы можете либо ответить на вопрос другим способом (скажем, путем возврата идентификатора ожидающей операции), либо использовать среду, которая поддерживает асинхронную операцию. Sani c предназначен для поддержки asyn c с Flask -подобным API.

...