python - 如何在python中处理特定功能的并发请求?
问题描述
我将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调用发生在这里,所以在得到第一个字母的结果之前,下一个序列调用被触发到相同的函数,请建议我为这个过程提供更好的解决方案。
解决方案
推荐阅读
- python - 如何在keras中将三维数组转换为五维数组
- ios - iOS - 需要这样的日期选择器
- powerbi - Add column of previous values from table of tables in Power BI / Power Query
- java - Json 消费的 Jersey Post 请求 405 错误
- python - 位于子图中的多个计数图中的 Seaborn 堆叠条
- apache-spark - SparkSQL 基于表达式创建一个新列
- java - RESTful Web 服务。访问资源
- omnet++ - 如何在 Veins 中选择合适的模拟模型?
- java - java.lang.ClassCastException:java.lang.String 无法转换为 com.security.model.UserRequest
- asp.net - 在 Azure 中将 asp.net 和 node.js 作为虚拟应用程序运行