通过celery异步处理一个查询任务的完整代码-创新互联
今天介绍通过celery实现一个异步任务。有这样一个需求,前端发起一个查询的请求,但是发起查询后,查询可能不会立即返回结果。这时候,发起查询后,后端可以把这次查询当作一个task,并立即返回一个能唯一表明该task的值,如taskID(用户后面可以通过这个taskID 随时查看结果),用户收到这个taskID后,可以转去处理其他任务,而不必一直等待查询结果。后端API调用celery来处理这个task,并将结果值保存在一个csv文件中,后面用户通过taskID 查询时返回结果。
成都创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为大余企业提供专业的成都网站设计、做网站、成都外贸网站建设公司,大余网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。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异步处理一个查询任务的完整代码-创新互联
文章转载:http://myzitong.com/article/dcdeoi.html