如何在python中处理特定功能的并发请求?

时间:2020-09-05 05:45:01

标签: python reactjs flask solr

我正在将python flask项目用作我的电子商务网站的api后端,而Solr是我网站中的产品搜索和搜索建议层,当客户在搜索框中输入任何内容时,我的前端(react Js),它将为每个字符调用一个API,并且该API从http调用获取请求,然后进行查询并在solr中进行搜索,然后将匹配的关键字作为http响应返回。

我的问题:并发的http调用导致对搜索建议的响应延迟。

路线

@routes.route('/Search/suggest',methods=['POST'])
    def Suggest():
        search_response = ProductSearchController().SearchSuggest(request.get_json(force=True))
        return search_response

控制器

def SearchSuggest(self,request):
        try:
            keyword = str(request['keyword'])
            final_suggesions = []
            print("########################### START ##################################" + str(request['keyword']) + " start =====>")
            print(datetime.now())

            brandStatus, brandResponse         = self.solrHelper.getBrandSuggestion(request)            

            catSubCatStatus, catSubCatResponse = self.solrHelper.getCategorySubCategorySuggestion(request)
            
            productStatus, productResponse     = self.solrHelper.getProductSuggestion(request)
            
            modelStatus, modelResponse         = self.solrHelper.getModelSuggestion(request)
            
           
            print(" ########################## END ############################# "+str(request['keyword']) + " end <=====")
            print(datetime.now())            

            ####### some solr response validation goes here #########

            response_data = SuccessResponse(final_suggesions)

        except Exception as e:
            track = traceback.format_exc()
            app.logger.error('Server Error: %s', (e))
            app.logger.critical(track)
            return False, response_data
        finally:
            return True, response_data

输出日志

########################### START ##################################cr start =====>
2020-09-05 05:32:56.706340
########################### START ##################################cri start =====>
2020-09-05 05:32:56.944722
########################### START ##################################cric start =====>
2020-09-05 05:32:57.157928
########################### START ##################################crick start =====>
2020-09-05 05:32:57.368213
########################### START ##################################cricke start =====>
2020-09-05 05:32:57.605466
########################### START ##################################cricket start =====>
2020-09-05 05:32:57.786270
 ########################## END ############################# cr end <=====
2020-09-05 05:32:58.056129
 ########################## END ############################# cri end <=====
2020-09-05 05:32:58.497315
 ########################## END ############################# cric end <=====
2020-09-05 05:32:58.717623
 ########################## END ############################# crick end <=====
2020-09-05 05:32:58.902956
 ########################## END ############################# cricke end <=====
2020-09-05 05:32:59.198349
 ########################## END ############################# cricket end <=====
2020-09-05 05:32:59.206024

如您在日志中所见,在搜索框中输入用户cricket。并发的http调用在这里发生,因此在获得第一个字母的结果之前,下一个序列调用将触发相同的功能,请为我提供一个更好的解决方案。

0 个答案:

没有答案