2
回答
一个任务模型的结构设计与实现
【腾讯云】学生服务器套餐10元/月 >>>   
领导分配的任务,设计一个基于任务的模型,该模型需具有如下功能:

1,每个(父)任务可以有多个(子)任务,(子)任务具有(父)任务的特性,也可以有多个(子)任务
2,多个(子)任务可以并发执行
3,多个(子)任务可以顺序执行,前一个任务的结果作为当前任务的输入
4,(子)任务可以使用(父)任务的执行结果执行相应任务
5,可以根据需要组合子任务进行并行执行或顺序执行
6,每个任务都有N个输入项和N个输出项


求各路高人指路,目前迷糊中。

伪代码可以用python或者c#,给出具体实现最好
<无标签>
举报
debuglife
发帖于6年前 2回/213阅
共有2个答案 最后回答: 6年前

https://github.com/x03570227/zztask

这个项目实现了你说的任务调度功能(JAVA的,核心部分其他语言应该差不多),暂时没有实现任务链(就是你说的子父任务),但任务链的实现并不难,只要在这个系统的基础,更改任务调度,使满足任务链功能即可。

看项目估计你也没什么头续,几个关键的类跟你讲下吧,给你提供点思路

https://github.com/x03570227/zztask/blob/release-board/zz91-task-common/src/main/java/com/zz91/task/common/ZZTask.java

这是抽象出来的任务接口,核心两个方法,init(), exec(Date baseDate); 用于任务初始化和执行时做的事。所有任务最后都实现这个接口,而任务调度线程可以通过接口实例化任务,从而执行不同的任务。(还有一个任务抽象类你可以不用关心)

https://github.com/x03570227/zztask/blob/release-board/zz91-task-board/src/main/java/com/zz91/task/board/thread/TaskRunThread.java

多个任务可能同时进行,所以可以选择多线程实现任务调度,任务之间可以互不影响。上面的这个类是线程内任务调度时做的事,其实也很简单,就两件事,实例化任务,调用初始化和执行方法,记录任务执行状态。任务链的问题你只需要在这个类里处理即可,比如任务初始化前检测子父任务规则和状态(这些信息可以记录在数据库内)。

6,每个任务都有N个输入项和N个输出项 
第六个问题其实不是任务系统的问题,工具应该避免参与业务,输入与输出其实都属于业务,所以让写任务的人自己去决定,系统只需要提供ZZTask接口即可。在我提供给你的系统里,所有的任务在系统内只是定义(任务信息,调度信息),可以随时添加和删除,而真正的任务内容抛给开发去实现,通过任务系统上传到服务器并通过开关开启任务。


这是搜索索引任务的类图,与上面讲的类似,其他信息你可以在github里找找,你可以参考下


顶部