通过celery异步处理一个查询任务的完整代码-创新互联
今天介绍通过celery实现一个异步任务。有这样一个需求,前端发起一个查询的请求,但是发起查询后,查询可能不会立即返回结果。这时候,发起查询后,后端可以把这次查询当作一个task,并立即返回一个能唯一表明该task的值,如taskID(用户后面可以通过这个taskID 随时查看结果),用户收到这个taskID后,可以转去处理其他任务,而不必一直等待查询结果。后端API调用celery来处理这个task,并将结果值保存在一个csv文件中,后面用户通过taskID 查询时返回结果。

def application(environ,start_response):
"""部分代码省略"""
query_string = environ['QUERY_STRING']
serviceGroupName = ""
for getParam in query_string.split("&"):
params = getParam.split("=")
resultInfo = ""
if params[0] == "type":
alertType = params[1]
elif params[0] == "projectName":
projectName = params[1]
elif params[0] == "serviceGroupName":
serviceGroupName = params[1]
else:
resultInfo = error_info(-1, "GET参数只能为type=<?>&projectName=<?>&serviceGroupName=<?>;必须指定三个参数", {})
return [resultInfo]
taskId = 1
result_file_name = '/var/www/dba_api/api/test/'+ str(taskId) + '.csv'
contentInfo = json.dumps({"taskId":1,"opType":"continue","serviceGroupName":serviceGroupName,"dbHost":dbHost,"dbPasswd":dbPasswd,"dbUser":dbUser,"dbPort":dbPort})
result = getServiceInfo.apply_async((contentInfo,),queue="getServiceInfo")
taskInfo = "任务已经创建,详情请查看:http://10.4.34.254/api/task?taskId=%s"% (taskId)
return [resultInfo] 本文标题:通过celery异步处理一个查询任务的完整代码-创新互联
标题URL:http://www.jxjierui.cn/article/dcdeoi.html


咨询
建站咨询
