CN116820535A - 任务处理方法、装置、计算机可读存储介质和电子装置 - Google Patents
任务处理方法、装置、计算机可读存储介质和电子装置 Download PDFInfo
- Publication number
- CN116820535A CN116820535A CN202310761059.1A CN202310761059A CN116820535A CN 116820535 A CN116820535 A CN 116820535A CN 202310761059 A CN202310761059 A CN 202310761059A CN 116820535 A CN116820535 A CN 116820535A
- Authority
- CN
- China
- Prior art keywords
- task
- target
- subtask
- upstream
- determining
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 18
- 238000011144 upstream manufacturing Methods 0.000 claims abstract description 226
- 238000012545 processing Methods 0.000 claims abstract description 45
- 238000000034 method Methods 0.000 claims abstract description 42
- 238000004590 computer program Methods 0.000 claims description 28
- 230000004044 response Effects 0.000 claims description 27
- 238000009877 rendering Methods 0.000 abstract description 69
- 238000004519 manufacturing process Methods 0.000 abstract description 16
- 238000005516 engineering process Methods 0.000 abstract description 4
- 238000004458 analytical method Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 7
- 230000000694 effects Effects 0.000 description 6
- 230000003993 interaction Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 230000008878 coupling Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 101100388499 Rattus norvegicus Dnah7 gene Proteins 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本申请公开了一种任务处理方法、装置、计算机可读存储介质和电子装置,涉及计算机技术领域。该方法包括:确定目标任务的任务名称列表、任务依赖关系和任务信息;基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;基于任务名称列表确定目标层级信息;基于目标依赖关系和目标层级信息处理目标任务。本申请解决了相关技术中由于不同渲染农场管理软件的依赖性描述方式不同,且较难理解,导致制作、更新以及维护渲染农场管理软件的成本较高的技术问题。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种任务处理方法、装置、计算机可读存储介质和电子装置。
背景技术
影视游戏制作过程中,通常包括多个制作流程,由于每个制作流程的文件发布都会生成多种文件,因此提出了渲染农场以及渲染农场管理软件,渲染农场用于处理大规模的计算机渲染任务,而渲染农场管理软件用于管理计算机渲染任务,以实现高效的渲染流程,提高生产效率和渲染质量。
目前,不同的渲染农场管理软件对任务的描述以及子任务之间的依赖关系的描述都不同,若要更换渲染农场管理软件,则需要对任务的依赖关系进行重新编写,但渲染农场管理软件的依赖性描述较难理解,一般制作人员难以掌握其描述方式。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本申请至少部分实施例提供了一种任务处理方法、装置、计算机可读存储介质和电子装置,以至少解决相关技术中由于不同渲染农场管理软件的依赖性描述方式不同,且较难理解,导致制作、更新以及维护渲染农场管理软件的成本较高的技术问题。
根据本申请其中一实施例,提供了一种任务处理方法,该方法包括:确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;基于目标依赖关系和目标层级信息处理目标任务。
根据本申请其中一实施例,还提供了一种任务处理装置,该装置包括:第一确定模块,第一确定模块用于确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;第二确定模块,第二确定模块用于基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;第三确定模块,第三确定模块用于基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;处理模块,处理模块用于基于目标依赖关系和目标层级信息处理目标任务。
根据本申请其中一实施例,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,计算机程序被设置为在计算机或处理器上运行时执行上述实施例中的任务处理方法。
根据本申请其中一实施例,还提供了一种电子装置,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行上述实施例中的任务处理方法。
在本申请至少部分实施例中,通过确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;基于目标依赖关系和目标层级信息处理目标任务。达到了采用通用的多任务依赖性描述方式管理任务的目的,从而能够实现将渲染农场管理软件与其对应的依赖性描述方式解耦合,在任意渲染农场管理软件中均采用相同的通用易读的描述方式作为中间层,方便制作人员编写和阅读,以及低成本更换渲染农场管理软件的技术效果,进而解决了相关技术中由于不同渲染农场管理软件的依赖性描述方式不同,且较难理解,导致制作、更新以及维护渲染农场管理软件的成本较高的技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本申请实施例的一种任务处理的移动终端的硬件结构框图;
图2是根据本申请其中一实施例的任务处理方法的流程图;
图3是根据本申请其中一实施例的任务依赖关系的示意图;
图4是根据本申请其中一实施例的层级信息的示意图;
图5是根据本申请其中一实施例的确定任务依赖性描述的流程图;
图6是根据本申请其中一可选实施例的任务处理装置的结构框图;
图7是根据本申请实施例的一种电子装置的示意图。
具体实施方式
为了便于理解,示例性地给出了部分与本申请实施例相关概念的说明以供参考。
如下所示:
渲染农场:是一种由多台计算机组成的集群系统,用于处理大规模的计算机渲染任务。渲染农场通常由一台或多台主机和多台从属计算机组成,主机负责任务调度和管理,从属计算机负责实际的渲染计算。通过将渲染任务分配给多台计算机,渲染农场可以实现高效的渲染流程,加快渲染速度,提高渲染质量,同时也能够降低单台计算机的负担和成本。渲染农场广泛应用于电影、动画、游戏、建筑和工程等领域,是处理大规模渲染任务的重要工具。
渲染农场管理软件:渲染农场管理软件是一种用于管理计算机渲染任务的软件。它可以协调多台计算机之间的任务分配和资源利用,以实现高效的渲染流程。这类软件通常包括任务调度、作业管理、资源管理、队列管理、监控和报告工具等功能,能够帮助用户最大化渲染农场的利用率,提高生产效率和渲染质量。常见的渲染农场管理软件包括Deadline Software、Qube Software、Thinkbox Krakatoa等。
软件应用程序编程接口(Application Programming Interface,API):是一组定义了软件组件之间如何互相交互的接口。它们允许软件开发人员在不了解内部实现细节的情况下使用其他组件的功能。通过API,软件组件可以进行通信、传递数据和请求服务。
JSON(JavaScript Object Notation)文件格式:是一种轻量级的数据交换格式,通常用于网络(Web)应用程序之间的数据传输。它基于JavaScript语言的语法,但也可以使用其他编程语言进行解析和生成。JSON格式数据易于阅读和编写,并且可以被各种编程语言和平台支持。它通常用于API的响应和请求、配置文件、日志记录等场景中。JSON数据由键值对组成,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象等。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在一种可能的实施方式中,针对计算机技术领域下,在影视游戏制作过程中,对制作流程中的任务文件进行管理时,通常使用渲染农场管理软件进行管理。
发明人经过实践并仔细研究后,发现上述方法仍然存在由于渲染农场管理软件对于其任务的依赖性描述具有高耦合性,因此若要更换渲染农场管理软件的话,需要将对相应任务的依赖关系进行重新编写,但由于软件的任务依赖性描述在软件的API层面,描述起来比较晦涩难懂,一般制作人员难以理解和掌握,需要特定专业人员才能进行编写,导致制作、更新以及维护渲染农场管理软件的成本较高的问题。基于此,本申请实施例在影视游戏制作场景下,提出了一种任务处理方法,通过确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;基于目标依赖关系和目标层级信息处理目标任务。达到了采用通用的多任务依赖性描述方式管理任务的目的,从而能够实现将渲染农场管理软件与其对应的依赖性描述方式解耦合,在任意渲染农场管理软件中均采用相同的通用易读的描述方式作为中间层,方便制作人员编写和阅读,以及低成本更换渲染农场管理软件的技术效果,进而解决了相关技术中由于不同渲染农场管理软件的依赖性描述方式不同,且较难理解,导致制作、更新以及维护渲染农场管理软件的成本较高的技术问题。
本申请涉及到的上述方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,该移动终端可以是智能手机、掌上电脑以及移动互联网设备、平板电脑(Personal Access Display,PAD)、游戏机等终端设备。图1是本申请实施例的一种任务处理方法的移动终端的硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于中央处理器(centralprocessing unit,CPU)、图形处理器(graphics processing unit,GPU)、数字信号处理(digital signal processing,DSP)芯片、微处理器(microcontroller unit,MCU)、可编程逻辑器件(field-programmable gate array,FPGA)、神经网络处理器(neural networkprocessing unit,NPU)、张量处理器(tensor processing unit,TPU)、人工智能(artificial intelligent,AI)类型处理器等的处理装置)和用于存储数据的存储器104,在本申请其中一实施例中,还可以包括:传输设备106、输入输出设备108以及显示设备110。
在一些以游戏场景为主的可选实施例中,上述设备还可以提供具有触摸触敏表面的人机交互界面,该人机交互界面可以感应手指接触和/或手势来与图形用户界面(Graphical User Interface,GUI)进行人机交互,该人机交互功能可以包括如下交互:创建网页、绘图、文字处理、制作电子文档、游戏、视频会议、即时通信、收发电子邮件、通话界面、播放数字视频、播放数字音乐和/或网络浏览等、用于执行上述人机交互功能的可执行指令被配置/存储在一个或多个处理器可执行的计算机程序产品或可读存储介质中。
本领域技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
根据本申请其中一实施例,提供了一种任务处理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在一种可能的实施方式中,本申请实施例提供了一种任务处理方法,图2是根据本申请其中一实施例的任务处理方法的流程图,如图2所示,该方法包括如下步骤:
步骤S20,确定目标任务的任务名称列表、任务依赖关系和任务信息。
其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系任务信息用于表示目标任务的子任务信息。
目标任务可以理解为任务管理软件所管理的任务,示例性地,可以理解为在影视游戏制作过程中生成的、由渲染农场管理软件所管理的任务。如图3所示,图3是根据本申请其中一实施例的任务依赖关系的示意图,目标任务可以为图3中的A任务、B任务、C任务和D任务,分别记为AJob、BJob、CJob和DJob。
任务名称列表可以理解为用于记录目标任务的任务名称的列表类型数据,记为jobList。示例性地,如图3所示,jobList用于记录A任务、B任务、C任务和D任务的名称,可以记为jobList=["AJob","BJob","CJob","DJob"]。
任务依赖关系可以理解为用于表示目标任务之间的驱动关系的字典类型数据,也即用于表示目标任务之间的依赖关系,记为jobInLink。示例性地,如图3所示,图3中示出了AJob、BJob、CJob和DJob之间的依赖关系,其中,箭头起始端的任务为上游任务,箭头末端的任务为下游任务,上游任务能够驱动执行下游任务,也即下游任务只有在对应的上游任务完成后才能执行。
在本申请实施例中,jobInLink所采用的是下游任务:{上游任务:{下游子任务ID描述:上游子任务ID描述}}的字典结构,如图3所示,CJob的依赖关系可以记录为"CJob":{"AJob":{"0":"0-3","1":"4-8","2":"9-10"}},表示CJob的上游任务是AJob,且CJob的子任务0受AJob的子任务0-子任务3驱动,CJob的子任务1受AJob的子任务4-子任务8驱动,CJob的子任务2受AJob的子任务9和子任务10驱动。且只有当AJob的子任务0-3都完成后,CJob的子任务0才会开启执行,以此类推。
任务信息可以理解为用于表示目标任务的子任务信息的字典类型数据,即用于记录任务实际上运行的一些辅助数据,例如每个任务的子任务的数量范围,任务所执行的命令以及任务执行所需要的辅助文件等,记为jobDataInfo。示例性地,如图3所示,AJob中包括子任务0-子任务10这11个子任务,可以记为jobDataInfo={"AJob":{"Command":"...","Frames":"0-10"}}。
可以理解的是,目标任务的jobList、jobInLink和jobDataInfo可以是制作人员基于任务管理软件的需求预设置的。
示例性地,以图3所示的任务依赖关系为例,任务名称列表可以记为jobList=["AJob","BJob","CJob","DJob"]。任务依赖关系可以记为jobInLink={"BJob":{"AJob":{"*":"*"}},"CJob":{"AJob":{"0":"0-3","1":"4-8","2":"9-10"}},"DJob":{"BJob":{"all":"all"},"CJob":{"*":"*"}}}。任务信息可以记为
jobDataInfo={"AJob":{"Command":"...","Frames":"0-10"},"BJob":{"Command":"...","Frames":"0-10"},"CJob":{"Command":"...","Frames":"0-3"},"DJob":{"Command":"...","Frames":"0-2"}}。
可选地,上述jobList和jobInLink和jobDataInfo均以JSON数据格式为描述的数据格式。
步骤S22,基于任务依赖关系和任务信息确定目标依赖关系。
其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系。
子任务依赖关系用于表示单个子任务之间的依赖关系,基于jobInLink进行转换,记为jobRealLink。示例性地,如图3所示,CJob的依赖关系可以记录为"CJob":{"AJob":{"0":"0,1,2,3","1":"4,5,6,7,8","2":"9,10"}},表示CJob的子任务0受AJob的子任务0、子任务1、子任务2和子任务3驱动,以此类推。
任务列表依赖关系用于记录任务的下游任务依赖,其数据结构跟jobRealLink类似,但只存储上游和下游任务列表,基于jobInLink进行转换,记为jobOutLink。示例性地,如图3所示,jobOutLink的结构是上游任务:{下游任务列表},例如,将图3所示的jobInLink转换后,即为{"AJob":["BJob","CJob"],"BJob":["DJob"],"CJob":["DJob"]},表示AJob的下游任务是BJob和CJob,BJob的下游任务是DJob,以此类推。
根据jobInLink和jobDataInfo能够具体确定出目标任务中每个子任务之间的依赖关系jobRealLink,以及每个任务与对应驱动的下游任务之间的关系jobOutLink。
示例性地,依据图3对应的jobInLink和jobDataInfo,可以确定出目标依赖关系中的子任务依赖关系jobRealLink={"BJob":{"AJob":{"0":"0","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10"}},"CJob":{"AJob":{"0":"0,1,2,3","1":"4,5,6,7,8","2":"9,10"}},"DJob":{"BJob":{"0":"0,1,2,3,4,5,6,7,8,9,10","1":"0,1,2,3,4,5,6,7,8,9,10","2":"0,1,2,3,4,5,6,7,8,9,10"},"CJob":{"0":"0","1":"1","2":"2"}}}。目标依赖关系中的任务列表依赖关系jobOutLink={"AJob":["BJob","CJob"],"BJob":["DJob"],"CJob":["DJob"]}。
步骤S24,基于任务名称列表确定目标层级信息。
其中,目标层级信息用于表示目标任务的层级。
任务名称列表中的每个任务都有对应的层级Level,即层级信息,以数字0,1,2等表示。在任务依赖关系中,上游任务的层级高于下游任务的层级,层级最高的任务为无依赖驱动状态,表示无需其他任务驱动即可开启执行。在本申请实施例中,层级的数字越低,表示层级越高,0层级为最高层级,表示无需其他任务驱动即可开启执行。而层级的数字越大,表示当前任务对其他任务的依赖度越高,即需要其他任务完成才能开启执行。
示例性地,如图3所示,AJob的层级为0层级,即层级最高,因此AJob中的所有子任务均无需其他任务驱动即可开启执行。BJob和CJob属于同一层级1层级,可以看出BJob和CJob中的部分子任务依赖AJob驱动,需要对应的AJob子任务完成后才可以开启执行。DJob的层级为2层级,表示需要对应的1层级子任务完成后才可以开启执行。此外,图3中CJob的子任务3虽位于1层级,但也无需其他任务驱动即可开启。
可以理解的是,位于同一层级的任务之间无依赖关系。
根据jobList和jobInLink的描述信息,分析jobList中的每一个任务,从而确定出每个目标任务的层级信息,最终得到目标层级信息,记为jobLevelInfo。jobLevelInfo可以类似多叉树数据结构,用于记录最终形成任务链以后,任务的层级数据。基于jobLevelInfo可以确定出某一节点的所有父节点,以及该节点所在的层级。但与多叉树数据结构的不同点在于,jobLevelInfo中的某个节点可能会存在多个父节点,因此该节点的任务层级就是最高父节点的任务层级加1。
示例性地,如图4所示,图4是根据本申请其中一实施例的层级信息的示意图,以图4中221号节点为例,基于图4所示的jobLevelInfo可以确定出221号节点的所有父节点,即1节点、2节点和22节点,以该221号节点所在的层级为第三层级。
进而可以通过jobLevelInfo的记录方式,记录确定的每个目标任务的目标层级信息,示例性地,基于图3所示的依赖关系,也可以输出jobLevelInfo={"DJob":2,"CJob":1,"AJob":0,"BJob":1},从而表示每个任务的层级信息,可以看出,DJob的层级信息为第二层级,以此类推。
步骤S26,基于目标依赖关系和目标层级信息处理目标任务。
根据确定出的子任务依赖关系jobRealLink、任务列表依赖关系jobOutLink以及目标层级信息jobLevelInfo处理目标任务,从而实现采用通用的依赖关系描述方式确定出目标任务的依赖关系,对目标任务进行管理。
基于上述方式,制作人员能够依据实际任务的依赖关系快速写出任务之间的任务依赖描述,进而能快速通过任务依赖描述输出任务的依赖关系的编程描述,并接入渲染农场管理软件耦合层,输出使软件能识别的任务依赖关系,从而通过制作人员和机器语言都易于理解的描述方式,把任务的依赖关系呈现出来。
通过上述步骤,通过确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;基于目标依赖关系和目标层级信息处理目标任务。达到了采用通用的多任务依赖性描述方式管理任务的目的,从而能够实现将渲染农场管理软件与其对应的依赖性描述方式解耦合,在任意渲染农场管理软件中均采用相同的通用易读的描述方式作为中间层,方便制作人员编写和阅读,以及低成本更换渲染农场管理软件的技术效果,进而解决了相关技术中由于不同渲染农场管理软件的依赖性描述方式不同,且较难理解,导致制作、更新以及维护渲染农场管理软件的成本较高的技术问题。
在一种可能的实施方式中,步骤S22中,基于任务依赖关系和任务信息确定目标依赖关系可以包括以下执行步骤:
步骤S221,基于第一记录形式、任务依赖关系和任务信息确定子任务依赖关系。
其中,第一记录形式用于将下游任务的下游子任务与上游任务的上游子任务对应记录。
第一记录形式用于记录单个子任务之间的依赖关系,以图3为例,根据图3所示的jobInLink和jobDataInfo,对jobInLink进行转换,从而确定基于第一记录形式记录的子任务依赖关系jobRealLink={"BJob":{"AJob":{"0":"0","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10"}},"CJob":{"AJob":{"0":"0,1,2,3","1":"4,5,6,7,8","2":"9,10"}},"DJob":{"BJob":{"0":"0,1,2,3,4,5,6,7,8,9,10","1":"0,1,2,3,4,5,6,7,8,9,10","2":"0,1,2,3,4,5,6,7,8,9,10"},"CJob":{"0":"0","1":"1","2":"2"}}}。
步骤S222,基于第二记录形式、任务依赖关系和任务信息确定任务列表依赖关系。
其中,第二记录形式用于将上游任务与驱动的下游任务对应记录。
第一记录形式用于记录任务的下游任务依赖,其结构是上游任务:{下游任务列表}。以图3为例,根据图3所示的jobInLink和jobDataInfo,对jobInLink进行转换,从而确定基于第二记录形式记录的jobOutLink={"AJob":["BJob","CJob"],"BJob":["DJob"],"CJob":["DJob"]}。
在一种可能的实施方式中,步骤S221中,基于第一记录形式、任务依赖关系和任务信息确定子任务依赖关系可以包括以下执行步骤:
步骤S2211,确定任务依赖关系中对目标任务的子任务的描述方式;
步骤S2212,基于描述方式、第一记录形式、任务依赖关系和任务信息确定子任务依赖关系。
其中,描述方式为通过预设规则描述目标任务的子任务的方式。
预设规则可以包括以下八种:
第一种:定义"*"代表以单个子任务为一个子任务ID解析元素的方式生成解析列表。例如子任务是0-5,"*"对应生成的子任务ID解析列表为[[0],[1],[2],[3],[4],[5]],其生成的解析列表含多个解析元素。
第二种:定义"数字"代表指定的子任务号,只生成含单个子任务ID的解析元素的解析列表。例如"3",生成的子任务ID解析列表为[[3]],其生成的解析列表只含单个解析元素。
第三种:定义"数字*"代表以多个(数字)子任务为一个子任务ID解析元素的方式生成解析列表。例如子任务是0-10,"3*"的描述表对应生成的是[[0,1,2],[3,4,5],[6,7,8],[9,10]]),其生成的解析列表含多个解析元素。
第四种:定义"数字-数字"代表子任务的开始和结束ID,以1为递增,以单个子任务为一个子任务ID解析元素的方式生成解析列表。例如"3-5"生成的子任务ID解析列表为[[3,4,5]],其生成的解析列表只含单个解析元素。
第五种:定义"数字-数字x数字"代表子任务的开始和结束ID,以最后数字为递增,以单个子任务为一个子任务ID解析元素的方式生成解析列表。例如"1-20x2"生成的子任务ID解析列表为[[1,3,5...17,19]],其生成的解析列表只含单个解析元素。
第六种:定义"数字-数字x数字+数字"代表子任务的开始ID+偏移量offset(2)和结束ID,以x数字(3)递增,以单个子任务为一个子任务ID解析元素的方式生成解析列表。例如"1-20x3+2"对应的子任务ID解析列表为[[3,6,9,12,15,17,20]],其生成的解析列表只含单个解析元素。
第七种:定义"all"代表这个任务的所有子任务,以全部子任务作为一个子任务ID解析元素的方式生成解析列表,为了表达所有整个任务完毕驱动下游任务或者上游子任务完成了会驱动整个下游任务。例如子任务是0-5,则其生成的子任务ID解析列表为[[0,1,2,3,4,5]],其生成的解析列表只含单个解析元素。
第八种:定义",",即以逗号分隔的描述,分拆逗号后的单个描述再生成的子任务号,也即是把这些生成的所有子任务ID作为一个子任务ID解析元素的方式生成解析列表。例如"1,3,6-8,10",其生成的子任务ID解析列表为[[1,3,6,7,8,10]],其生成的解析列表只含单个解析元素。
通过确定任务依赖关系中对目标任务的子任务的描述方式,从而对应解析生成以第一记录形式记录的子任务依赖关系jobRealLink。
此外,在生成对应的依赖关系过程中,由于单个子任务ID描述会生成含单个或多个解析元素的子任务ID解析列表,根据木桶效应,下游解析元素和上游解析元素需要一一对应,若出现多出来的解析元素则放弃,即表示该被放弃的元素无对应的上游子任务或下游子任务。
例如,若下游子任务ID描述解析出来的列表为[[0],[1,2]]对应上游子任务ID描述解析出来的列表为[[0,1,2],[3,4],[5,6,7]],那么[0]对应[0,1,2],[1,2]对应[3,4],上游的[5,6,7]没有对应则被放弃,相应地也表示下游没有任务依赖上游的[5,6,7]的驱动执行。
在一种可能的实施方式中,步骤S24中,基于任务名称列表确定目标层级信息可以包括以下执行步骤:
步骤S241,迭代任务名称列表,确定当前任务;
步骤S242,判断当前任务是否存在层级信息,得到第一判断结果;
步骤S243,根据第一判断结果确定目标层级信息。
步骤S241-步骤S243可以理解为,通过迭代任务名称列表jobList,确定当前任务currentJob,判断currentJob是否已确定了层级信息,即currentJob是否存在层级信息,得到第一判断结果,进而能够根据第一判断结果确定目标层级信息。
判断currentJob是否已确定了层级信息可以通过判断jobLevelInfo中是否包括currentJob来进行,若存在则表示已确定了currentJob的层级信息,也即表示currentJob已迭代过,进而可以继续迭代任务名称列表中的下一个任务。若不存在则继续确定currentJob的层级信息。
在一种可能的实施方式中,步骤S243中,根据第一判断结果确定目标层级信息可以包括以下执行步骤:
步骤S2431,响应于第一判断结果为当前任务存在层级信息,确定目标层级信息,并迭代任务名称列表;或,
步骤S2432,响应于第一判断结果为当前任务不存在层级信息,基于任务依赖关系判断当前任务是否存在上游任务,得到第二判断结果;
步骤S2433,根据第二判断结果确定目标层级信息。
若currentJob在jobLevelInfo中,即第一判断结果为当前任务存在层级信息,则直接通过jobLevelInfo确定出currentJob的层级信息即可,并继续迭代任务名称列表,更新currentJob。
若currentJob不在jobLevelInfo中,即第一判断结果为当前任务不存在层级信息,则基于任务依赖关系jobInLink判断当前任务currentJob是否存在上游依赖信息,得到第二判断结果,进而根据第二判断结果确定currentJob的层级信息。
判断当前任务是否存在上游任务可以通过判断jobInLink中是否存在currentJob的信息来进行,若jobInLink中存在currentJob,则表示currentJob有对应的上游任务,因此即可确定出该currentJob的层级并非顶层层级,也即并非0层级。若jobInLink中不存在currentJob,则表示currentJob没有对应的上游任务,因此即可确定出该currentJob的层级为顶层层级,也即为0层级。
在一种可能的实施方式中,步骤S2433中,根据第二判断结果确定目标层级信息可以包括以下执行步骤:
步骤S24331,响应于第二判断结果为当前任务存在上游任务,获取当前任务的目标上游任务,并确定目标上游任务的层级信息;或,
步骤S24332,响应于第二判断结果为当前任务不存在上游任务,确定当前任务的层级信息为零层级。
若jobInLink中存在currentJob,即第二判断结果为当前任务存在上游任务,则获取currentJob的上游任务,进而确定上游任务的层级信息。
若jobInLink中不存在currentJob,即第二判断结果为当前任务不存在上游任务,则表示currentJob没有对应的上游任务,因此currentJob的层级为0层级。
在一种可能的实施方式中,步骤S24331中,确定目标上游任务的层级信息可以包括以下执行步骤:
步骤S243311,迭代目标上游任务,确定当前上游任务;
步骤S243312,判断当前上游任务是否存在层级信息,得到第三判断结果;
步骤S243313,根据第三判断结果确定目标层级信息。
由于currentJob的上游任务包括至少一种任务,因此在确定currentJob的上游任务的层级信息时,通过迭代该至少一种上游任务,确定当前上游任务,并基于前述确定层级信息的方式再对当前上游任务进行判断,首先判断jobLevelInfo中是否存在当前上游任务的层级信息,得到第三判断结果,进而根据第三判断结果确定目标层级信息。
在一种可能的实施方式中,步骤S243313中,根据第三判断结果确定目标层级信息可以包括以下执行步骤:
步骤S2433131,响应于第三判断结果为当前上游任务存在层级信息,确定目标层级信息,并迭代目标上游任务;或,
步骤S2433132,响应于第三判断结果为当前上游任务不存在层级信息,基于任务依赖关系判断当前上游任务是否存在上游任务,得到第四判断结果,并根据第四判断结果确定目标层级信息。
若是当前上游任务在jobLevelInfo中,即第三判断结果为当前上游任务存在层级信息,则直接通过jobLevelInfo确定出当前上游任务的层级信息即可,并继续迭代currentJob的至少一种上游任务,更新当前上游任务。
若当前上游任务不在jobLevelInfo中,即第三判断结果为当前上游任务不存在层级信息,则基于任务依赖关系jobInLink判断当前上游任务是否存在上游依赖信息,得到第四判断结果,进而根据第四判断结果确定当前上游任务的层级信息。
可以理解的是,依旧可以通过判断jobInLink中是否存在当前上游任务的信息来进行,若jobInLink中存在当前上游任务,则表示当前上游任务有对应的上游任务,因此即可确定出该当前上游任务的层级并非顶层层级,也即并非0层级。若jobInLink中不存在当前上游任务,则表示当前上游任务没有对应的上游任务,因此即可确定出该当前上游任务的层级为顶层层级,也即为0层级。
由此,可以根据上述循环方式判断出jobList中所有任务的层级信息,确定出目标层级信息jobLevelInfo。
在一种可能的实施方式中,该方法还可以包括以下执行步骤:
步骤S281,基于目标层级信息确定目标任务的发送顺序;
步骤S282,基于发送顺序,输出子任务依赖关系、任务列表依赖关系和目标层级信息至任务管理软件。
其中,发送顺序由低层级至高层级排列。
确定出目标层级信息jobLevelInfo之后,基于jobLevelInfo中每个任务的层级高低可以确定出目标任务的发送顺序,该发送顺序由低层级至高层级排列,即先发送层级最低的任务,最后发送层级最高的任务。
基于该发送顺序,将子任务依赖关系、任务列表依赖关系和目标层级信息发送至任务管理软件,从而使任务管理软件基于上述依赖描述方式管理任务。
在一种可能的实施方式中,该方法还可以包括以下执行步骤:
步骤S291,响应于完成上游任务的第一上游子任务,确定第一上游子任务对应驱动的第一下游子任务;
步骤S292,确定第一下游子任务对应的上游子任务列表;
步骤S293,响应于上游子任务列表中的任务均完成,执行第一下游子任务;
步骤S294,响应于上游子任务列表中存在未完成的任务,等待执行第一下游子任务。
其中,上游子任务列表中包括第一上游子任务。
再根据上述任务的依赖描述方法执行任务时,上游任务中的第一上游子任务完成后,通过确定该第一上游子任务对应驱动的第一下游子任务,再确定该第一下游子任务对应的上游子任务列表,当第一下游子任务对应的所有上游子任务均完成后,该第一下游子任务才可以开启执行。若第一下游子任务对应的上游子任务存在未完成的子任务,则需要继续等待。
综上,此处对本申请中出现的参数、术语以及工具进行说明:
jobList:即所有任务名字的字符型数组。
子任务依赖信息:即{下游子任务ID描述:上游子任务ID描述}的字典数据,用于表示上游任务的子ID都完成了,下游任务的子ID才会被开启。
jobInLink:记录当前所有任务及其子任务的依赖关系的字典类型数据,其采用的结构是下游任务:{上游任务:{下游子任务ID描述:上游子任务ID描述}}的字典结构。
jobStack:字符串的堆栈,存放任务名列表,遵循后入先出原则。例如[["AJob"],["BJob"]],新增的任务将会排在第一位,例如进入任务["CJob","DJob"],jobStack就会变成[["CJob","DJob"],"AJob","BJob"],删除时,则会先删除["CJob","DJob"]。
currentJob:迭代jobList中,当前任务的名字。
jobLevelInfo:记录最终形成任务链以后,任务的层级数据。如图4中,1节点是第0层级,2节点是第1层级,221节点是第3层级,以此类推。
jobDataInfo:记录任务实际上运行的一些辅助数据(主要是每个任务的子任务的数量范围,任务所执行的命令以及任务执行所需要的辅助文件等等)的字典类型数据,Frames代表子任务的范围的ID描述,以0为开始ID,结束ID是任务数-1。
子任务ID分析方法基于以下4点:
第一点:子任务ID解析列表,以大列表包含小列表的形式代表子任务ID解析结构。例如[[0]],[[0,1]]或者[[0,1],[2,3]]。
第二点:子任务ID解析元素,即子任务ID解析列表中的每个小列表。即上述[[0]]中的[0],[[0,1],[2,3]]中的[0,1]和[2,3]。
第三点:子任务ID描述的对应关系规则,jobInLink分析每个下游上游任务中的{下游子任务ID描述:上游子任务ID描述},会生成下游子任务ID解析列表和上游子任务ID解析列表。列表中的每个子任务ID解析元素分别对应,多出来的子任务ID解析元素不作对应。例如,下游子任务ID描述解析出来的列表为[[0],[1,2]]对应上游子任务ID描述解析出来的列表为[[0,1,2],[3,4],[5,6,7]],那么[0]对应[0,1,2],[1,2]对应[3,4],上游的[5,6,7]没有对应。
第四点:下上游子任务ID解析元素对应的理解,即下游的子任务ID解析元素中所有的子任务ID同受上游的子任务ID解析元素中所有的子任务ID所驱动。例如[0]对应[0,1,2],即上游的0,1,2子任务完成了,下游的0号任务才会开始。[1,2]对应[3,4],即上游的3和4子任务完成了,下游的1和2号任务才会开始。
子任务ID描述:包含8种描述方式,参见步骤S2211和步骤S2212处的描述,此处不过多赘述。
outJobList:根据任务的层级,由高层级的任务到低层级的任务输出发送任务顺序的数组。
jobRealLink:把jobInLink的信息转换成单个子任务依赖信息。
jobOutLink:记录job的下游依赖,数据结构跟jobRealLink类似,但只存储上游和下游任务列表,依据jobInLink转换,其结构是上游任务:{下游任务列表}。
多任务依赖的描述方案基于以下4点:
第一点:采用Json的文件格式中列表和字典的数据结构。
第二点:任务列表使用字符串的列表来表示,如["AJob","BJob","CJob","DJob"]。
第三点:任务的子任务数目使用字典结构来表示,使用Frames搭配子任务ID描述作为字典的键值对。其中子任务ID描述是其以0为开始ID,结束ID是任务数-1,组成相应的值,如{"AJob":{"Frames":"0-10"}}。
第四点:任务的依赖关系使用字典结构来表示,使用下游任务:{上游任务:{下游子任务ID描述:上游子任务ID描述}}作为字典的键值结构,如{"DJob":{"BJob":{"all":"all"},"CJob":{"*":"*"}}}。
子任务依赖描述翻译成单个子任务关联的方法:首先基于上述子任务ID描述的方法,把jobInLink中的{下游子任务ID描述:上游子任务ID描述}分别拆开成最终子任务ID。并基于1.9.6下上游子任务ID解析元素对应的规则,生成下游子任务ID解析元素和上游子任务ID解析元素的对应。之后再把下游子任务ID解析元素里面每一个ID单独拆开,即可以生成单个子任务关联的方法,进而就可以把jobInLink的信息生成jobRealLink的信息。
生成任务依赖和任务层级的方法:如图5所示,图5是根据本申请其中一实施例的确定任务依赖性描述的流程图,此处以图3所示的依赖关系为例,也即以jobList=["AJob","BJob","CJob","DJob"];jobInLink={"BJob":{"AJob":{"*":"*"}},"CJob":{"AJob":{"0":"0-3","1":"4-8","2":"9-10"}},"DJob":{"BJob":{"all":"all"},"CJob":{"*":"*"}}};jobDataInfo={"AJob":{"Command":"...","Frames":"0-10"},"BJob":{"Command":"...","Frames":"0-10"},"CJob":{"Command":"...","Frames":"0-3"},"DJob":{"Comm and":"...","Frames":"0-2"}}为例,具体说明上述目标依赖关系和目标层级信息的确定方式。
先创建一个jobLevelInfo的空字典,利用任务依赖关系jobInLink和任务信息jobDataInfo生成子任务依赖关系jobRealLink和任务列表依赖关系jobOutLink。
通过循环迭代任务名称列表jobList确定第一个当前任务currentJob=AJob,同时还可以检测任务依赖是否形成环,即是否出错。
将currentJob=AJob存入任务列表tempJobs,此时tempJobs=[AJob],并将tempJobs中的AJob压入任务堆栈jobStack,此时jobStack=[AJob]。
之后将jobStack中最顶层元素存入A任务列表ATempJobs,此时ATempJobs=[AJob]。
再循环迭代ATempJobs,确定第一个当前任务tempJob=Ajob。
判断当前任务tempJob=Ajob是否存在层级信息,由于AJob不在jobLevelInfo,进而判断当前任务tempJob=Ajob是否存在上游任务,由于AJob也不在jobInLink,因此确定AJob的jobLevel=0,即jobLevelInfo[AJob]=0。
之后继续迭代jobList确定第二个当前任务currentJob=BJob,依照同样的流程将BJob存入任务列表tempJobs,此时tempJobs=[BJob],并将tempJobs中的BJob压入任务堆栈jobStack,此时jobStack=[BJob]。
再将jobStack中最顶层元素存入A任务列表ATempJobs,此时ATempJobs=[BJob]。
循环迭代ATempJobs,确定第一个当前任务tempJob=BJob。
判断当前任务tempJob=Bjob是否存在层级信息,由于BJob不在jobLevelInfo中,进而判断当前任务tempJob=Bjob是否存在上游任务,由于BJob在jobInLink中,因此从jobInLink中获取BJob的上游依赖信息,将AJob添加到B任务列表BTempJobs中,此时BTempJobs由空变成BTempJobs=[AJob]。
由于ATempJobs目前已经被迭代完,因此将BTempJobs压到jobStack最顶层,此时jobStack=[[AJob],[BJob]]。由于jobStack最顶层被更新,由[BJob]变成[AJob],因此继续获取jobStack的最顶层元素到ATempJobs,此时ATempJobs=[AJob]。
循环迭代ATempJobs,确定第一个当前任务tempJob=AJob,再判断AJob是否在jobLevelInfo中,由于AJob已在jobLevelInfo,即AjobLevel=0。此时根据jobStack=[[AJob],[BJob]]可以确定出BJobLevel=AJobLevel+1=1,也即jobLevelInfo[BJob]=1。
之后继续迭代jobList确定第三个当前任务currentJob=CJob,依照同样的流程将CJob存入任务列表tempJobs,此时tempJobs=[CJob],并将tempJobs中的CJob压入任务堆栈jobStack,此时jobStack=[CJob]。
再将jobStack中最顶层元素存入A任务列表ATempJobs,此时ATempJobs=[CJob]。
循环迭代ATempJobs,确定第一个当前任务tempJob=CJob。
判断当前任务tempJob=Cjob是否存在层级信息,由于CJob不在jobLevelInfo中,进而判断当前任务tempJob=Cjob是否存在上游任务,由于CJob在jobInLink中,因此从jobInLink中获取CJob的上游依赖信息,将AJob添加到B任务列表BTempJobs中,此时BTempJobs由空变成BTempJobs=[AJob]。
由于ATempJobs目前已经被迭代完,因此将BTempJobs压到jobStack最顶层,此时jobStack=[[AJob],[CJob]]。由于jobStack最顶层被更新,由[CJob]变成[AJob],因此继续获取jobStack的最顶层元素到ATempJobs,此时ATempJobs=[AJob]。
循环迭代ATempJobs,确定第一个当前任务tempJob=AJob,再判断AJob是否在jobLevelInfo中,由于AJob已在jobLevelInfo,即AjobLevel=0。此时根据jobStack=[[AJob],[CJob]]可以确定出CJobLevel=AJobLevel+1=1,也即jobLevelInfo[CJob]=1。
最后继续迭代jobList确定第四个当前任务currentJob=DJob,依照同样的流程将DJob存入任务列表tempJobs,此时tempJobs=[DJob],并将tempJobs中的DJob压入任务堆栈jobStack,此时jobStack=[DJob]。
再将jobStack中最顶层元素存入A任务列表ATempJobs,此时ATempJobs=[DJob]。
循环迭代ATempJobs,确定第一个当前任务tempJob=DJob。
判断当前任务tempJob=Djob是否存在层级信息,由于DJob不在jobLevelInfo中,进而判断当前任务tempJob=Djob是否存在上游任务,由于DJob在jobInLink中,因此从jobInLink中获取DJob的上游依赖信息,将BJob和CJob添加到B任务列表BTempJobs中,此时BTempJobs由空变成BTempJobs=[BJob,CJob]。
由于ATempJobs目前已经被迭代完,因此将BTempJobs压到jobStack最顶层,此时jobStack=[[BJob,CJob],[DJob]]。由于jobStack最顶层被更新,由[DJob]变成[BJob,CJob],因此继续获取jobStack的最顶层元素到ATempJobs,此时ATempJobs=[BJob,CJob]。
循环迭代ATempJobs,确定第一个当前任务tempJob=BJob,再判断BJob是否在jobLevelInfo中,由于BJob已在jobLevelInfo,即BjobLevel=1。继续迭代ATempJobs,确定第二个当前任务tempJob=CJob,再判断CJob是否在jobLevelInfo中,由于CJob已在jobLevelInfo,即CjobLevel=1。
由于BJobLevel=CJobLevel=1,此时根据jobStack=[[BJob,CJob],[DJob]]可以确定出DJobLevel=(max(BJobLevel,CJobLevel))+1=max(1,1)+1=2,也即jobLevelInfo[DJob]=2。
由此,便得到了上述jobList中所有任务的目标依赖关系和目标层级信息,进而可以通过将上述目标依赖关系和目标层级信息输出至任务管理软件,从而使任务管理软件基于上述依赖描述方式管理任务。
此外,若第一次循环迭代jobList,获取到了DJob,则流程如下:
先创建一个jobLevelInfo的空字典,利用任务依赖关系jobInLink和任务信息jobDataInfo生成子任务依赖关系jobRealLink和任务列表依赖关系jobOutLink。
通过循环迭代任务名称列表jobList确定第一个当前任务currentJob=DJob,同时还可以检测任务依赖是否形成环,即是否出错。
将currentJob=DJob存入任务列表tempJobs,此时tempJobs=[DJob],并将tempJobs中的DJob压入任务堆栈jobStack,此时jobStack=[DJob]。
之后将jobStack中最顶层元素存入A任务列表ATempJobs,此时ATempJobs=[DJob]。
再循环迭代ATempJobs,确定第一个当前任务tempJob=Djob。
判断当前任务tempJob=Djob是否存在层级信息,由于DJob不在jobLevelInfo,进而判断当前任务tempJob=Djob是否存在上游任务,由于DJob在jobInLink中,因此从jobInLink中获取DJob的上游依赖信息,将BJob和CJob添加到B任务列表BTempJobs中,此时BTempJobs由空变成BTempJobs=[BJob,CJob]。
由于ATempJobs目前已经被迭代完,因此将BTempJobs压到jobStack最顶层,此时jobStack=[[BJob,CJob],[DJob]]。由于jobStack最顶层被更新,由[DJob]变成[BJob,CJob],因此继续获取jobStack的最顶层元素到ATempJobs,此时ATempJobs=[BJob,CJob]。
循环迭代ATempJobs,确定第一个当前任务tempJob=BJob,判断BJob是否在jobLevelInfo中,由于BJob不在jobLevelInfo,进而判断当前任务tempJob=Bjob是否存在上游任务,由于BJob在jobInLink中,因此从jobInLink中获取BJob的上游依赖信息,将AJob添加到B任务列表BTempJobs中,此时BTempJobs由空变成BTempJobs=[AJob]。
之后再次迭代ATempJobs,确定第一个当前任务tempJob=CJob,判断CJob是否在jobLevelInfo中,由于CJob不在jobLevelInfo,进而判断当前任务tempJob=Cjob是否存在上游任务,由于CJob在jobInLink中,因此从jobInLink中获取CJob的上游依赖信息,将AJob添加到B任务列表BTempJobs中,但由于AJob已经存在BTempJobs中,因此此处不再添加。
由于ATempJobs目前已经被迭代完,因此将BTempJobs压到jobStack最顶层,此时JobStack=[[AJob],[BJob,CJob],[DJob]]。由于jobStack最顶层被更新,由[AJob]变成[BJob,CJob],因此继续获取jobStack的最顶层元素到ATempJobs,此时ATempJobs=[BJob,CJob]。
循环迭代ATempJobs,确定第一个当前任务tempJob=AJob,再判断AJob是否在jobLevelInfo中,由于AJob不在jobLevelInfo,进而判断当前任务tempJob=Ajob是否存在上游任务,由于AJob也不在jobInLink,因此确定AJob的jobLevel=0,即jobLevelInfo[AJob]=0。
此时BTempJobs是空,因此不用压到jobStack上面,根据jobStack=[[AJob],[BJob,CJob],[DJob]],由于AJobLevel=0,因此顺序下来BJobLevel=CJobLevel=1,DJobLevel=2,也即jobLevelInfo[AJob]=0,jobLevelInfo[BJob]=1,jobLevelInfo[CJob]=1,jobLevelInfo[DJob]=2。
由此,便得到了上述jobList中所有任务的目标依赖关系和目标层级信息,进而可以通过将上述目标依赖关系和目标层级信息输出至任务管理软件,从而使任务管理软件基于上述依赖描述方式管理任务。
此外,在迭代jobStack时,若jobInLink中不存在检测job(checkJob)的信息(获取到最顶部上游),或者检测job(checkJob)和当初的currentJob一样,则确定任务依赖环出现错误。
最后依照jobLevelInfo的数字由大到小排序,生成最终输出的outJobList(最终任务发送的先后顺序列表)。也即输出的jobLevelInfo是{"DJob":2,"CJob":1,"AJob":0,"BJob":1},输出的outJobList是DJob,BJob,CJob,AJo,可以理解的是,同一个jobLevel的job没有相互的依赖关系。
任务解锁流程:上游任务的子任务完成后,通过查询jobOutLink,查询该任务的所有下游任务列表。之后迭代查询下游任务的列表,查询该任务下的未开始的子任务,通过jobRealLink查询其上游任务的子任务是否都已经完成,若都已经完成,则开启当前子任务,否则继续等待。例如CJob的2任务完成了,可以通过jobOutLink看到CJob下游任务为DJob,然后查询所有DJob的子任务,如果可以看到DJob的子任务2与CJob的子任务2关联,同时也关联BJob的子任务0-10,如果这12个子任务(CJob的子任务2和BJob的子任务0-10)都完成了,那么这个DJob的子任务2就会开启。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在本实施例中还提供了一种任务处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是根据本申请其中一实施例的任务处理装置的结构框图,如图6所示,以任务处理装置600为例,该任务处理装置600包括:第一确定模块601,第一确定模块601用于确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;第二确定模块602,第二确定模块602用于基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;第三确定模块603,第三确定模块603用于基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;处理模块604,处理模块604用于基于目标依赖关系和目标层级信息处理目标任务。
可选地,第二确定模块602还用于:基于第一记录形式、任务依赖关系和任务信息确定子任务依赖关系,其中,第一记录形式用于将下游任务的下游子任务与上游任务的上游子任务对应记录;基于第二记录形式、任务依赖关系和任务信息确定任务列表依赖关系,其中,第二记录形式用于将上游任务与驱动的下游任务对应记录。
可选地,第二确定模块602还用于:确定任务依赖关系中对目标任务的子任务的描述方式,其中,描述方式为通过预设规则描述目标任务的子任务的方式;基于描述方式、第一记录形式、任务依赖关系和任务信息确定子任务依赖关系。
可选地,第三确定模块603还用于:迭代任务名称列表,确定当前任务;判断当前任务是否存在层级信息,得到第一判断结果;根据第一判断结果确定目标层级信息。
可选地,第三确定模块603还用于:响应于第一判断结果为当前任务存在层级信息,确定目标层级信息,并迭代任务名称列表;或,响应于第一判断结果为当前任务不存在层级信息,基于任务依赖关系判断当前任务是否存在上游任务,得到第二判断结果;根据第二判断结果确定目标层级信息。
可选地,第三确定模块603还用于:响应于第二判断结果为当前任务存在上游任务,获取当前任务的目标上游任务,并确定目标上游任务的层级信息;或,响应于第二判断结果为当前任务不存在上游任务,确定当前任务的层级信息为零层级。
可选地,第三确定模块603还用于:迭代目标上游任务,确定当前上游任务;判断当前上游任务是否存在层级信息,得到第三判断结果;根据第三判断结果确定目标层级信息。
可选地,第三确定模块603还用于:响应于第三判断结果为当前上游任务存在层级信息,确定目标层级信息,并迭代目标上游任务;或,响应于第三判断结果为当前上游任务不存在层级信息,基于任务依赖关系判断当前上游任务是否存在上游任务,得到第四判断结果,并根据第四判断结果确定目标层级信息。
可选地,还包括:输出模块,用于基于目标层级信息确定目标任务的发送顺序,其中,发送顺序由低层级至高层级排列;基于发送顺序,输出子任务依赖关系、任务列表依赖关系和目标层级信息至任务管理软件。
可选地,还包括:执行模块,用于响应于完成上游任务的第一上游子任务,确定第一上游子任务对应驱动的第一下游子任务;确定第一下游子任务对应的上游子任务列表,其中,上游子任务列表中包括第一上游子任务;响应于上游子任务列表中的任务均完成,执行第一下游子任务;或,响应于上游子任务列表中存在未完成的任务,等待执行第一下游子任务。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
可选地,在本实施例中,上述计算机可读存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,上述计算机可读存储介质可以被设置为存储用于执行以下步骤的计算机程序:
步骤S20,确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;
步骤S22,基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;
步骤S24,基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;
步骤S26,基于目标依赖关系和目标层级信息处理目标任务。
可选地,上述计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:基于第一记录形式、任务依赖关系和任务信息确定子任务依赖关系,其中,第一记录形式用于将下游任务的下游子任务与上游任务的上游子任务对应记录;基于第二记录形式、任务依赖关系和任务信息确定任务列表依赖关系,其中,第二记录形式用于将上游任务与驱动的下游任务对应记录。
可选地,上述计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:确定任务依赖关系中对目标任务的子任务的描述方式,其中,描述方式为通过预设规则描述目标任务的子任务的方式;基于描述方式、第一记录形式、任务依赖关系和任务信息确定子任务依赖关系。
可选地,上述计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:迭代任务名称列表,确定当前任务;判断当前任务是否存在层级信息,得到第一判断结果;根据第一判断结果确定目标层级信息。
可选地,上述计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:响应于第一判断结果为当前任务存在层级信息,确定目标层级信息,并迭代任务名称列表;或,响应于第一判断结果为当前任务不存在层级信息,基于任务依赖关系判断当前任务是否存在上游任务,得到第二判断结果;根据第二判断结果确定目标层级信息。
可选地,上述计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:响应于第二判断结果为当前任务存在上游任务,获取当前任务的目标上游任务,并确定目标上游任务的层级信息;或,响应于第二判断结果为当前任务不存在上游任务,确定当前任务的层级信息为零层级。
可选地,上述计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:迭代目标上游任务,确定当前上游任务;判断当前上游任务是否存在层级信息,得到第三判断结果;根据第三判断结果确定目标层级信息。
可选地,上述计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:响应于第三判断结果为当前上游任务存在层级信息,确定目标层级信息,并迭代目标上游任务;或,响应于第三判断结果为当前上游任务不存在层级信息,基于任务依赖关系判断当前上游任务是否存在上游任务,得到第四判断结果,并根据第四判断结果确定目标层级信息。
可选地,上述计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:基于目标层级信息确定目标任务的发送顺序,其中,发送顺序由低层级至高层级排列;基于发送顺序,输出子任务依赖关系、任务列表依赖关系和目标层级信息至任务管理软件。
可选地,上述计算机可读存储介质还被设置为存储用于执行以下步骤的程序代码:响应于完成上游任务的第一上游子任务,确定第一上游子任务对应驱动的第一下游子任务;确定第一下游子任务对应的上游子任务列表,其中,上游子任务列表中包括第一上游子任务;响应于上游子任务列表中的任务均完成,执行第一下游子任务;或,响应于上游子任务列表中存在未完成的任务,等待执行第一下游子任务。
在该实施例的计算机可读存储介质中,提供了一种任务处理的技术方案,通过确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;基于目标依赖关系和目标层级信息处理目标任务。达到了采用通用的多任务依赖性描述方式管理任务的目的,从而能够实现将渲染农场管理软件与其对应的依赖性描述方式解耦合,在任意渲染农场管理软件中均采用相同的通用易读的描述方式作为中间层,方便制作人员编写和阅读,以及低成本更换渲染农场管理软件的技术效果,进而解决了相关技术中由于不同渲染农场管理软件的依赖性描述方式不同,且较难理解,导致制作、更新以及维护渲染农场管理软件的成本较高的技术问题。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个计算机可读存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本申请实施方式的方法。
在本申请的示例性实施例中,计算机可读存储介质上存储有能够实现本实施例上述方法的程序产品。在一些可能的实施方式中,本申请实施例的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本实施例上述“示例性方法”部分中描述的根据本申请各种示例性实施方式的步骤。
根据本申请的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本申请实施例的程序产品不限于此,在本申请实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
上述程序产品可以采用一个或多个计算机可读介质的任意组合。该计算机可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列举)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Electrically Programmable Read-Only Memory,EPROM)或闪存、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
需要说明的是,计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、射频(Radio Frequency,RF)等等,或者上述的任意合适的组合。
本申请的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
步骤S20,确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;
步骤S22,基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;
步骤S24,基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;
步骤S26,基于目标依赖关系和目标层级信息处理目标任务。
可选地,上述处理器还可以被设置为通过计算机程序执行以下步骤:基于第一记录形式、任务依赖关系和任务信息确定子任务依赖关系,其中,第一记录形式用于将下游任务的下游子任务与上游任务的上游子任务对应记录;基于第二记录形式、任务依赖关系和任务信息确定任务列表依赖关系,其中,第二记录形式用于将上游任务与驱动的下游任务对应记录。
可选地,上述处理器还可以被设置为通过计算机程序执行以下步骤:确定任务依赖关系中对目标任务的子任务的描述方式,其中,描述方式为通过预设规则描述目标任务的子任务的方式;基于描述方式、第一记录形式、任务依赖关系和任务信息确定子任务依赖关系。
可选地,上述处理器还可以被设置为通过计算机程序执行以下步骤:迭代任务名称列表,确定当前任务;判断当前任务是否存在层级信息,得到第一判断结果;根据第一判断结果确定目标层级信息。
可选地,上述处理器还可以被设置为通过计算机程序执行以下步骤:响应于第一判断结果为当前任务存在层级信息,确定目标层级信息,并迭代任务名称列表;或,响应于第一判断结果为当前任务不存在层级信息,基于任务依赖关系判断当前任务是否存在上游任务,得到第二判断结果;根据第二判断结果确定目标层级信息。
可选地,上述处理器还可以被设置为通过计算机程序执行以下步骤:响应于第二判断结果为当前任务存在上游任务,获取当前任务的目标上游任务,并确定目标上游任务的层级信息;或,响应于第二判断结果为当前任务不存在上游任务,确定当前任务的层级信息为零层级。
可选地,上述处理器还可以被设置为通过计算机程序执行以下步骤:迭代目标上游任务,确定当前上游任务;判断当前上游任务是否存在层级信息,得到第三判断结果;根据第三判断结果确定目标层级信息。
可选地,上述处理器还可以被设置为通过计算机程序执行以下步骤:响应于第三判断结果为当前上游任务存在层级信息,确定目标层级信息,并迭代目标上游任务;或,响应于第三判断结果为当前上游任务不存在层级信息,基于任务依赖关系判断当前上游任务是否存在上游任务,得到第四判断结果,并根据第四判断结果确定目标层级信息。
可选地,上述处理器还可以被设置为通过计算机程序执行以下步骤:基于目标层级信息确定目标任务的发送顺序,其中,发送顺序由低层级至高层级排列;基于发送顺序,输出子任务依赖关系、任务列表依赖关系和目标层级信息至任务管理软件。
可选地,上述处理器还可以被设置为通过计算机程序执行以下步骤:响应于完成上游任务的第一上游子任务,确定第一上游子任务对应驱动的第一下游子任务;确定第一下游子任务对应的上游子任务列表,其中,上游子任务列表中包括第一上游子任务;响应于上游子任务列表中的任务均完成,执行第一下游子任务;或,响应于上游子任务列表中存在未完成的任务,等待执行第一下游子任务。
在该实施例的电子装置中,提供了一种任务处理的技术方案,通过确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,任务名称列表用于记录目标任务的任务名称,任务依赖关系用于表示目标任务之间的驱动关系,任务信息用于表示目标任务的子任务信息;基于任务依赖关系和任务信息确定目标依赖关系,其中,目标依赖关系包括子任务依赖关系和任务列表依赖关系,子任务依赖关系用于表示目标任务的子任务之间的驱动关系,任务列表依赖关系用于表示目标任务中上游任务与下游任务之间的驱动关系;基于任务名称列表确定目标层级信息,其中,目标层级信息用于表示目标任务的层级;基于目标依赖关系和目标层级信息处理目标任务。达到了采用通用的多任务依赖性描述方式管理任务的目的,从而能够实现将渲染农场管理软件与其对应的依赖性描述方式解耦合,在任意渲染农场管理软件中均采用相同的通用易读的描述方式作为中间层,方便制作人员编写和阅读,以及低成本更换渲染农场管理软件的技术效果,进而解决了相关技术中由于不同渲染农场管理软件的依赖性描述方式不同,且较难理解,导致制作、更新以及维护渲染农场管理软件的成本较高的技术问题。
图7是根据本申请实施例的一种电子装置的示意图。如图7所示,电子装置700仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,电子装置700以通用计算设备的形式表现。电子装置700的组件可以包括但不限于:上述至少一个处理器710、上述至少一个存储器720、连接不同系统组件(包括存储器720和处理器710)的总线730和显示器740。
其中,上述存储器720存储有程序代码,所述程序代码可以被处理器710执行,使得处理器710执行本申请实施例的上述方法部分中描述的根据本申请各种示例性实施方式的步骤。
存储器720可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)7201和/或高速缓存存储单元7202,还可以进一步包括只读存储单元(ROM)7203,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。
在一些实例中,存储器720还可以包括具有一组(至少一个)程序模块7205的程序/实用工具7204,这样的程序模块7205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。存储器720可进一步包括相对于处理器710远程设置的存储器,这些远程存储器可以通过网络连接至电子装置700。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
总线730可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理器710或者使用多种总线结构中的任意总线结构的局域总线。
显示器740可以例如触摸屏式的液晶显示器(Liquid Crystal Display,LCD),该液晶显示器可使得用户能够与电子装置700的用户界面进行交互。
可选地,电子装置700也可以与一个或多个外部设备800(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子装置700交互的设备通信,和/或与使得该电子装置700能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(Input/Output,I/O)接口750进行。并且,电子装置700还可以通过网络适配器760与一个或者多个网络(例如局域网(Local AreaNetwork,LAN),广域网(Wide Area Network,WAN)和/或公共网络,例如因特网)通信。如图7所示,网络适配器760通过总线730与电子装置700的其它模块通信。应当明白,尽管图7中未示出,可以结合电子装置700使用其它硬件和/或软件模块,可以包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、磁盘阵列(Redundant Array ofIndependent Disks,RAID)系统、磁带驱动器以及数据备份存储系统等。
上述电子装置700还可以包括:键盘、光标控制设备(如鼠标)、输入/输出接口(I/O接口)、网络接口、电源和/或相机。
本领域普通技术人员可以理解,图7所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,电子装置700还可包括比图7中所示更多或者更少的组件,或者具有与图1所示不同的配置。存储器720可用于存储计算机程序及对应的数据,如本申请实施例中的任务处理方法对应的计算机程序及对应的数据。处理器710通过运行存储在存储器720内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的任务处理方法。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (13)
1.一种任务处理方法,其特征在于,所述方法包括:
确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,所述任务名称列表用于记录所述目标任务的任务名称,所述任务依赖关系用于表示所述目标任务之间的驱动关系,所述任务信息用于表示所述目标任务的子任务信息;
基于所述任务依赖关系和所述任务信息确定目标依赖关系,其中,所述目标依赖关系包括子任务依赖关系和任务列表依赖关系,所述子任务依赖关系用于表示所述目标任务的子任务之间的驱动关系,所述任务列表依赖关系用于表示所述目标任务中上游任务与下游任务之间的驱动关系;
基于所述任务名称列表确定目标层级信息,其中,所述目标层级信息用于表示所述目标任务的层级;
基于所述目标依赖关系和所述目标层级信息处理所述目标任务。
2.根据权利要求1所述的方法,其特征在于,所述基于所述任务依赖关系和所述任务信息确定目标依赖关系包括:
基于第一记录形式、所述任务依赖关系和所述任务信息确定所述子任务依赖关系,其中,所述第一记录形式用于将所述下游任务的下游子任务与所述上游任务的上游子任务对应记录;
基于第二记录形式、所述任务依赖关系和所述任务信息确定所述任务列表依赖关系,其中,所述第二记录形式用于将所述上游任务与驱动的下游任务对应记录。
3.根据权利要求2所述的方法,其特征在于,所述基于第一记录形式、所述任务依赖关系和所述任务信息确定所述子任务依赖关系包括:
确定所述任务依赖关系中对所述目标任务的子任务的描述方式,其中,所述描述方式为通过预设规则描述所述目标任务的子任务的方式;
基于所述描述方式、所述第一记录形式、所述任务依赖关系和所述任务信息确定所述子任务依赖关系。
4.根据权利要求1所述的方法,其特征在于,所述基于所述任务名称列表确定目标层级信息包括:
迭代所述任务名称列表,确定当前任务;
判断所述当前任务是否存在层级信息,得到第一判断结果;
根据所述第一判断结果确定所述目标层级信息。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第一判断结果确定所述目标层级信息包括:
响应于所述第一判断结果为所述当前任务存在层级信息,确定所述目标层级信息,并迭代所述任务名称列表;或,
响应于所述第一判断结果为所述当前任务不存在层级信息,基于所述任务依赖关系判断所述当前任务是否存在上游任务,得到第二判断结果;
根据所述第二判断结果确定所述目标层级信息。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第二判断结果确定所述目标层级信息包括:
响应于所述第二判断结果为所述当前任务存在上游任务,获取所述当前任务的目标上游任务,并确定所述目标上游任务的层级信息;或,
响应于所述第二判断结果为所述当前任务不存在上游任务,确定所述当前任务的层级信息为零层级。
7.根据权利要求6所述的方法,其特征在于,所述确定所述目标上游任务的层级信息包括:
迭代所述目标上游任务,确定当前上游任务;
判断所述当前上游任务是否存在层级信息,得到第三判断结果;
根据所述第三判断结果确定所述目标层级信息。
8.根据权利要求7所述的方法,其特征在于,所述根据所述第三判断结果确定所述目标层级信息包括:
响应于所述第三判断结果为所述当前上游任务存在层级信息,确定所述目标层级信息,并迭代所述目标上游任务;或,
响应于所述第三判断结果为所述当前上游任务不存在层级信息,基于所述任务依赖关系判断所述当前上游任务是否存在上游任务,得到第四判断结果,并根据所述第四判断结果确定所述目标层级信息。
9.根据权利要求1-8中任一项所述的方法,其特征在于,所述方法还包括:
基于所述目标层级信息确定所述目标任务的发送顺序,其中,所述发送顺序由低层级至高层级排列;
基于所述发送顺序,输出所述子任务依赖关系、所述任务列表依赖关系和所述目标层级信息至任务管理软件。
10.根据权利要求1-8中任一项所述的方法,其特征在于,所述方法还包括:
响应于完成所述上游任务的第一上游子任务,确定所述第一上游子任务对应驱动的第一下游子任务;
确定所述第一下游子任务对应的上游子任务列表,其中,所述上游子任务列表中包括所述第一上游子任务;
响应于所述上游子任务列表中的任务均完成,执行所述第一下游子任务;或,响应于所述上游子任务列表中存在未完成的任务,等待执行所述第一下游子任务。
11.一种任务处理装置,其特征在于,所述装置包括:
第一确定模块,所述第一确定模块用于确定目标任务的任务名称列表、任务依赖关系和任务信息,其中,所述任务名称列表用于记录所述目标任务的任务名称,所述任务依赖关系用于表示所述目标任务之间的驱动关系,所述任务信息用于表示所述目标任务的子任务信息;
第二确定模块,所述第二确定模块用于基于所述任务依赖关系和所述任务信息确定目标依赖关系,其中,所述目标依赖关系包括子任务依赖关系和任务列表依赖关系,所述子任务依赖关系用于表示所述目标任务的子任务之间的驱动关系,所述任务列表依赖关系用于表示所述目标任务中上游任务与下游任务之间的驱动关系;
第三确定模块,所述第三确定模块用于基于所述任务名称列表确定目标层级信息,其中,所述目标层级信息用于表示所述目标任务的层级;
处理模块,所述处理模块用于基于所述目标依赖关系和所述目标层级信息处理所述目标任务。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为在计算机或处理器上运行时,执行上述权利要求1至10任一项中所述的任务处理方法。
13.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述权利要求1至10任一项中所述的任务处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310761059.1A CN116820535A (zh) | 2023-06-26 | 2023-06-26 | 任务处理方法、装置、计算机可读存储介质和电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310761059.1A CN116820535A (zh) | 2023-06-26 | 2023-06-26 | 任务处理方法、装置、计算机可读存储介质和电子装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116820535A true CN116820535A (zh) | 2023-09-29 |
Family
ID=88119825
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310761059.1A Pending CN116820535A (zh) | 2023-06-26 | 2023-06-26 | 任务处理方法、装置、计算机可读存储介质和电子装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116820535A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117437064A (zh) * | 2023-12-18 | 2024-01-23 | 凯美瑞德(苏州)信息科技股份有限公司 | 处理金融数据的方法、装置、电子设备及计算机可读介质 |
-
2023
- 2023-06-26 CN CN202310761059.1A patent/CN116820535A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117437064A (zh) * | 2023-12-18 | 2024-01-23 | 凯美瑞德(苏州)信息科技股份有限公司 | 处理金融数据的方法、装置、电子设备及计算机可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11386058B2 (en) | Rule-based autonomous database cloud service framework | |
CN107533453B (zh) | 用于生成数据可视化应用的系统和方法 | |
US10963810B2 (en) | Efficient duplicate detection for machine learning data sets | |
CN101650660B (zh) | 从中央存储装置引导计算机系统 | |
RU2543316C2 (ru) | Система и способ отказоустойчивого выполнения задач по расписанию в распределенных средах | |
CN102576354A (zh) | 支持不同部署架构的可扩展框架 | |
CN107526645A (zh) | 一种通信优化方法及系统 | |
US11620168B2 (en) | Managing metadata for a distributed processing system with manager agents and worker agents | |
US20090319951A1 (en) | Aggregating Service Components | |
US20120324432A1 (en) | Systems and methods to automatically generate classes from api source code | |
CN111492344B (zh) | 用于监测结构化查询语言(sql)查询的执行的系统和方法 | |
CN109978392B (zh) | 敏捷软件开发管理方法、装置、电子设备、存储介质 | |
US20130346992A1 (en) | Computing system, method for controlling thereof, and computer-readable recording medium having computer program for controlling thereof | |
CN104598299A (zh) | 用于对每条接收数据执行聚合处理的系统和方法 | |
CN116820535A (zh) | 任务处理方法、装置、计算机可读存储介质和电子装置 | |
Ganelin et al. | Spark: Big data cluster computing in production | |
WO2023059667A1 (en) | Methods and systems for representation, composition and execution of artificial intelligence centric applications | |
US20090328043A1 (en) | Infrastructure of data summarization including light programs and helper steps | |
CN103150145A (zh) | 数据仓库环境中的语义分组数据的并行处理 | |
KR20010110097A (ko) | 작업흐름-관리-시스템에서의 보관 방법 | |
US11475009B2 (en) | Intelligent memory allocation and deallocation of data | |
CN112015560B (zh) | 一种用于构建it基础设施的装置 | |
US20230004574A1 (en) | A system and method for etl pipeline processing | |
Bolton et al. | Professional SQL server 2012 internals and troubleshooting | |
CN113761040A (zh) | 数据库与应用程序双向映射方法、设备、介质及程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |