tipdm开源的python机器学习建模平台,用户通过拖拉就可以实现模型开发。
项目结构
backend :为java后台服务代码
frontedn :为vue js前端代码
mock-oauth-server:为java认证服务代码
主要分析backend后台服务代码,典型的java spring mvc web项目,项目结构如下:
framework-common:公共代码,主要为工具类,spring相关公用类
framework-model: 实体类
framework-persist:持久层
framework-service:service层,就两个数据库操作相关的service 接口和抽象类
tipdm-server: 服务核心
本次主要介绍下tipdm-server 模型执行代码实现
模型执行入库在ProjectController类中的execute方法,逻辑是验证权限,加载流程文件,执行流程,主要代码:
WorkFlow workFlow = new WorkFlow(executionId, tokenModel.getUsername(), content); //解析工作流文件,创建工作流对象
String workFlowId = workFlowScheduler.execute(workFlow);//执行工作流
进入 workFlowScheduler.execute(workFlow)方法,主要代码:
WorkFlowDexecutor dexecutor = new WorkFlowDexecutor(accessToken, flow, scheduler);//初始化dexecutor-core框架,构建流 程执行图
//启动一个线程监听流程
WorkFlowHandler workFlowHandler = new WorkFlowHandler(workFlowId, scheduler, dexecutor, semaphore);
workFlowHandler.start();//执行流程
这里需要对dexecutor-core框架有些了解,dexecutor-core主要为了使用户可以简单快速构建执行依赖任务。
WorkFlowHandler 是个线程类继承了Thread,其run方法:
@Override
public void run() {
this.dexecutor.execute(new ExecutionConfig().nonTerminating()); //通过dexecutor-core执行依赖任务
release();
}
实际最终执行任务的是JobProvider类中的provideTask方法,主要是通过构建quartz定时任务WorkFlowJobBean去执行,WorkFlowJobBean中的executeInternal方法执行IAlgorithm.run执行算法逻辑.