image_build_pyramid.py 3.6 KB
# coding=utf-8
#author:        4N
#createtime:    2021/7/19
#email:         nheweijun@sina.com


from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.StructuredPrint import StructurePrint
from app.models import db
from app.modules.data.models import Task
import multiprocessing
import uuid
import datetime
import requests
from app.util.component.TaskController import TaskController
from app.util.component.TaskWriter import TaskWriter
class Api(ApiTemplate):

    api_name = "创建影像金字塔"

    def process(self):

        # 返回结果
        res = {}
        try:
            task_guid = uuid.uuid1().__str__()


            pyramid_process = multiprocessing.Process(target=self.task, args=(task_guid,self.para))
            pyramid_process.start()

            task = Task(guid=task_guid,
                        name="{}构建影像金字塔".format(self.para.get("alias")),
                        create_time=datetime.datetime.now(),
                        state=0,
                        task_type=5,
                        creator=self.para.get("creator"),
                        process="影像创建金字塔中",
                        task_pid=pyramid_process.pid)

            db.session.add(task)
            db.session.commit()

            res["data"] = "创建影像金字塔任务已提交!"
            res["result"] = True

        except Exception as e:
            raise Exception("数据库错误!")

        return res


    def task(self,task_guid,para):
        task_writer = None
        try:

            #任务控制,等待执行
            TaskController.wait(task_guid)
            task_writer = TaskWriter(task_guid)

            task_writer.update_task({"state":2,"update_time":datetime.datetime.now(),"process" : "创建中"})
            task_writer.update_process("开始创建...")

            url = "{}/API/Service/Image/BuildPyramid".format(para.get("url"))
            response:requests.Response = requests.post(url,data=self.para)
            if not response.json().get("result"):
                raise Exception("由于{},影像服务修改失败!".format(response.json().get("msg")))

            task_writer.update_task({"state":1,"update_time":datetime.datetime.now(),"process" : "创建完成"})
            task_writer.update_process("创建完成!")

        except Exception as e:
            try:
                task_writer.update_task({"state": -1,"update_time":datetime.datetime.now(),"process": "下载失败"})
                task_writer.update_process( e.__str__())
                task_writer.update_process("任务中止!")
            except Exception as ee:
                StructurePrint().print(ee.__str__())
            raise e
        finally:
            try:
                task_writer.close()
            except Exception as e:
                StructurePrint().print(e.__str__())


    api_doc = {
        "tags": ["影像服务接口"],
        "parameters": [
            {"name": "guid",
             "in": "formData",
             "type": "string",
             "description": "guid"},
            {"name": "url",
             "in": "formData",
             "type": "string",
             "description": "url"},
            {"name": "alias",
             "in": "formData",
             "type": "string",
             "description": "影像alias"},
        ],
        "responses": {
            200: {
                "schema": {
                    "properties": {
                    }
                }
            }
        }
    }