一、BS系统中,java实现后端开发,python实现遥感功能,利用python的flask库将遥感功能发布服务,java通过发送http请求的形式调用python的遥感功能,处理完成后python再通过调用java发布的服务,将处理结果、处理状态等信息通过http请求形式传递给java后端。
from flask import Flask, request app = Flask(__name__) @app.route('/algorithm/building_detection', methods=['POST']) def buildingDectection(): task_id = request.json.get("taskid", None) task_name = request.json.get("taskname", None) input_files_str = request.json.get("input_files", None) output_file = request.json.get("output_file", None) ...... url = database_url data = {"taskid": task_id, "taskname": task_name, "status": status, "dataname": results, "error": res_obj.msg} data_ = json.dumps(data) res = requests.post(url=url, data=data_.encode("utf-8")) return dict(res_obj)
if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, threaded=False) # debug=False,
thread关键字设为True时,可以接收多个http请求,并行处理;设为False时,则是排队逐个处理请求。
注:利用flask发布服务,对应的每个功能都必须有返回值,否则提示“did not return a valid response. The function either returned None or ended without a return statement”
二、遥感功能经常会执行较长时间,发送的http请求可能不能持续等待造成中断,以至于不能接收到处理结果。所以才会在遥感功能处理完成后,再调用后端发布的服务,通过http请求的形式将处理结果、处理状态返回给后端。
三、通过flask发布服务,实现后端调用遥感功能,一旦发送请求后,待处理任务不可控。还有另外一种方法就是利用python去查询数据库中的任务表单,检索到待处理任务后,就获取相关参数,调用对应的遥感算法功能,处理完成后,再将处理结果和处理状态写入数据库。可以用while无线循环查询任务表单,也可以用定时任务定时查询。
if __name__ == '__main__': while True: handleService = HandleTaskService() res = handleService.executeHandleTask() time.sleep(30)