CN111176802B - 任务处理方法、装置、电子设备及存储介质 - Google Patents
任务处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN111176802B CN111176802B CN201910683418.XA CN201910683418A CN111176802B CN 111176802 B CN111176802 B CN 111176802B CN 201910683418 A CN201910683418 A CN 201910683418A CN 111176802 B CN111176802 B CN 111176802B
- Authority
- CN
- China
- Prior art keywords
- logic unit
- instance
- workflow
- task
- logic
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/313—Logic programming, e.g. PROLOG programming language
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及数据处理技术领域,公开了一种任务处理方法、装置、电子设备及存储介质,方法包括:获取目标任务对应的业务数据;获取目标任务的任务模块,任务模块包括多个逻辑单元实例,各逻辑单元实例之间具有设定的依赖关系;将业务数据输入任务模块中的第一级逻辑单元实例;并获得最后一级逻辑单元实例输出的业务处理结果,其中,各逻辑单元实例根据依赖关系确定位于其上一级的逻辑单元实例,并在根据上一级的逻辑单元实例的执行情况确定满足触发条件时,对上一级逻辑单元实例的输出数据执行相应的处理并输出处理结果。本申请实施例提供的技术方案,通过配置框架封装的方式以及简单的依赖关系,降低了维护逻辑单元实例间的依赖关系的成本。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种任务处理方法、装置、电子设备及存储介质。
背景技术
随着移动互联网的不断发展,业务需求也在不断增加,当一个项目发展到一定阶段时,项目功能的频繁变更,随之带来的是项目结构复杂度的增加以及程序代码量的增大。当一项任务的处理逻辑比较复杂时,为了更高效地使用计算资源,需要将该任务尽可能地划分成多个子任务,通过串行和并行执行各子任务对应的逻辑单元的方式,提高处理效率,子任务的划分粒度越细,并行效率越高。
但是,子任务的划分粒度越细,一项任务对应的逻辑单元就越多,这就需要花费大量的代码来处理逻辑单元之间的逻辑关系,不利于代码阅读,且在后续的维护中,一旦业务需求发生变更,修改成本较高且容易出错。
发明内容
本申请实施例提供一种任务处理方法、装置、电子设备及存储介质,以降低维护各逻辑单元间的依赖关系的成本。
一方面,本申请一实施例提供了一种任务处理方法,包括:
获取目标任务对应的业务数据,所述目标任务包括多个子任务;
获取所述目标任务的任务模块,所述任务模块包括多个逻辑单元实例,每个逻辑单元实例对应所述目标任务中的一个子任务,各逻辑单元实例之间具有设定的依赖关系,所述依赖关系根据所述多个子任务之间的处理逻辑设置;
将所述业务数据输入所述任务模块中的第一级逻辑单元实例;
并获得最后一级逻辑单元实例输出的业务处理结果,其中,各逻辑单元实例根据所述依赖关系确定位于其上一级的逻辑单元实例,并在根据上一级的逻辑单元实例的执行情况确定满足触发条件时,对上一级逻辑单元实例的输出数据执行相应的处理并输出处理结果。
可选地,所述获取所述目标任务的任务模块,具体包括:
获取所述目标任务的任务配置文件,所述任务配置文件中包括所述目标任务的各子任务对应的逻辑单元,以及各逻辑单元之间的依赖关系;
根据所述任务配置文件中的逻辑单元,创建对应的逻辑单元实例;
根据所述各逻辑单元之间的依赖关系,确定各逻辑单元实例之间的依赖关系。
可选地,所述任务配置文件还包括所述目标任务所需处理的业务数据的类别,以及每种类别的业务数据对应的工作流,每个工作流包括处理对应类别的业务数据所需的至少一个逻辑单元;
所述获取所述目标任务的任务模块,具体包括:
根据各类别的业务数据的数据量,确定各工作流对应的工作流数量N;
针对每个工作流,确定N个与所述工作流相同的工作流实例;
根据各工作流实例中的逻辑单元,创建对应的逻辑单元实例;
针对每个工作流实例,根据其对应的工作流中的逻辑单元之间的依赖关系,确定所述工作流实例中的逻辑单元实例之间的依赖关系;
针对每个工作流实例,根据其对应的工作流中的逻辑单元与其他工作流中的逻辑单元的依赖关系,确定所述工作流实例中的逻辑单元实例与其他工作流实例中的逻辑单元实例之间的依赖关系;
根据各类别的业务数据对应的N,将各类别的业务数据划分为N组;
确定每个工作流实例对应的业务数据的类别以及组别,并确定每个工作流实例中的各逻辑单元实例对应的输入数据。
可选地,本申请一实施例提供的任务处理方法还包括:
在确定出各逻辑单元实例之间的依赖关系后,确定所述各逻辑单元实例之间的依赖关系是否为有向无环图;
若不是有向无环图,则生成错误提示信息。
可选地,本申请一实施例提供的任务处理方法还包括:
各逻辑单元实例执行完对应的处理流程后,向位于其下一级的逻辑单元实例发送已执行完的通知消息;
所述根据上一级的逻辑单元实例的执行情况确定满足触发条件,具体包括:
根据上一级的逻辑单元实例发送的已执行完的通知消息,确定满足触发条件。
可选地,所述触发条件包括:所述上一级的逻辑单元实例均已执行完对应的处理流程,或者所述上一级的逻辑单元实例的执行时间均已超时,或者所述上一级的逻辑单元实例中的部分逻辑单元实例已执行完对应的处理流程且另一部分逻辑单元实例的执行时间已超时。
一方面,本申请一实施例提供了一种任务处理装置,包括:
数据获取模块,用于获取目标任务对应的业务数据,所述目标任务包括多个子任务;
任务调用模块,用于获取所述目标任务的任务模块,所述任务模块包括多个逻辑单元实例,每个逻辑单元实例对应所述目标任务中的一个子任务,各逻辑单元实例之间具有设定的依赖关系,所述依赖关系根据所述多个子任务之间的处理逻辑设置;
数据处理模块,用于将所述业务数据输入所述任务模块中的第一级逻辑单元实例;并获得最后一级逻辑单元实例输出的业务处理结果,其中,各逻辑单元实例根据所述依赖关系确定位于其上一级的逻辑单元实例,并在根据上一级的逻辑单元实例的执行情况确定满足触发条件时,对上一级逻辑单元实例的输出数据执行相应的处理并输出处理结果。
可选地,所述任务调用模块具体用于:
获取所述目标任务的任务配置文件,所述任务配置文件中包括所述目标任务的各子任务对应的逻辑单元,以及各逻辑单元之间的依赖关系;
根据所述任务配置文件中的逻辑单元,创建对应的逻辑单元实例;
根据所述各逻辑单元之间的依赖关系,确定各逻辑单元实例之间的依赖关系。
可选地,所述任务配置文件还包括所述目标任务所需处理的业务数据的类别,以及每种类别的业务数据对应的工作流,每个工作流包括处理对应类别的业务数据所需的至少一个逻辑单元。
相应地,所述任务调用模块具体用于:
根据各类别的业务数据的数据量,确定各工作流对应的工作流数量N;
针对每个工作流,确定N个与所述工作流相同的工作流实例;
根据各工作流实例中的逻辑单元,创建对应的逻辑单元实例;
针对每个工作流实例,根据其对应的工作流中的逻辑单元之间的依赖关系,确定所述工作流实例中的逻辑单元实例之间的依赖关系;
针对每个工作流实例,根据其对应的工作流中的逻辑单元与其他工作流中的逻辑单元的依赖关系,确定所述工作流实例中的逻辑单元实例与其他工作流实例中的逻辑单元实例之间的依赖关系;
根据各类别的业务数据对应的N,将各类别的业务数据划分为N组;
确定每个工作流实例对应的业务数据的类别以及组别,并确定每个工作流实例中的各逻辑单元实例对应的输入数据。
可选地,所述任务调用模块还用于:
在确定出各逻辑单元实例之间的依赖关系后,确定所述各逻辑单元实例之间的依赖关系是否为有向无环图;
若不是有向无环图,则生成错误提示信息。
可选地,数据处理模块,还用于:各逻辑单元实例执行完对应的处理流程后,向位于其下一级的逻辑单元实例发送已执行完的通知消息;
相应地,所述数据处理模块具体用于:根据上一级的逻辑单元实例发送的已执行完的通知消息,确定满足触发条件。
可选地,所述触发条件包括:所述上一级的逻辑单元实例均已执行完对应的处理流程,或者所述上一级的逻辑单元实例的执行时间均已超时,或者所述上一级的逻辑单元实例中的部分逻辑单元实例已执行完对应的处理流程且另一部分逻辑单元实例的执行时间已超时。
一方面,本申请一实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行计算机程序时实现上述任一种方法的步骤。
一方面,本申请一实施例提供了一种计算机可读存储介质,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现上述任一种方法的步骤。
本申请实施例提供的技术方案,通过配置框架封装的方式以及简单的依赖关系,即可实现对各逻辑单元实例的逻辑控制,无需编写大量的控制代码,降低了维护逻辑单元实例间的依赖关系的成本,进而使得开发者可以将更多精力投入到各逻辑单元内部的业务实现中。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,显而易见地,下面所介绍的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的任务处理方法的应用场景示意图;
图2A为多个子任务之间的依赖关系的一个示例图;
图2B为多个子任务之间的依赖关系的一个示例图;
图2C为多个子任务之间的依赖关系的一个示例图;
图3为本申请一实施例提供的应用于任务处理方法的一种配置框架的结构示意图;
图4A为本申请一实施例提供的基于同一逻辑单元创建多个逻辑单元实例的示例图;
图4B为本申请一实施例提供的基于同一逻辑单元创建多个逻辑单元实例的示例图;
图5为本申请一实施例提供的任务处理方法的流程示意图;
图6为本申请一实施例提供的获取目标任务的任务模块的方法的流程示意图;
图7为本申请一实施例提供的各逻辑单元实例之间的依赖关系的一个示例;
图8为本申请一实施例提供的逻辑单元实例内部执行的方法的流程示意图;
图9为本申请一实施例提供的获取目标任务的任务模块的方法的流程示意图;
图10为根据图2C对应的工作流创建的工作流实例的示意图;
图11为本申请一实施例提供的任务处理装置的结构示意图;
图12为本申请一实施例提供的电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
为了方便理解,下面对本申请实施例中涉及的名词进行解释:
终端设备:可以安装各类应用,并且能够将已安装的应用中提供的对象进行显示的设备,该电子设备可以是移动的,也可以是固定的,例如,手机、平板电脑、各类可穿戴设备、车载设备、个人数字助理(personal digital assistant,PDA)、销售终端(point ofsales,POS)、智能机器人或其他能够实现上述功能的电子设备等。
应用:即应用程序,可以完成某项或多项业务的计算机程序,一般具有可视的显示界面,能与用户进行交互,比如电子地图和微信等都可以称为应用。其中,有些应用需要用户安装到所使用的终端设备上才可以使用,有些则并不需要进行应用安装,例如,微信中的各个小程序。小程序不需要下载安装即可使用,用户扫一扫或者搜一下即可打开应用。
逻辑单元,是指抽象出的子任务对应的struct(结构体),内部封装了执行该子任务的代码,配置框架可通过逻辑单元提供的接口调用并执行相应的代码从而实现业务逻辑。
实例,是根据类创建出来的具体的“对象”,每个对象都拥有相同的方法,但各自处理的数据可能不同。本申请实施例中的逻辑单元实例即为根据逻辑单元创建出的对象。
工作流(line),是指通过串行、并行或者串并行等连接方式组合而成的一组逻辑单元的集合,一个工作流用于处理业务数据中的一种类别的数据。
延迟加载(lazy load),也称为懒加载,就是当在真正需要数据的时候,才真正执行数据加载操作,延迟加载机制可以避免一些无谓的性能开销。
附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
在具体实践过程中,当一项任务的处理逻辑比较复杂时,为了更高效地使用计算资源,需要将该任务尽可能地划分成多个子任务,通过串行和并行执行各子任务对应的逻辑单元的方式,提高处理效率,子任务的划分粒度越细,并行效率越高。但是,子任务的划分粒度越细,一项任务对应的逻辑单元就越多,这就需要花费大量的代码来处理逻辑单元之间的逻辑关系,即开发者除了要开发逻辑单元内部的代码,还需要开发处理逻辑单元之间的逻辑关系的控制单元,这需要额外增加大量的代码,不利于代码阅读。在后续的代码维护中,一旦业务需求发生变更,各个逻辑单元之间的逻辑关系也会发生变化,就需要对相应的控制单元内的代码进行修改,修改成本较高且容易出错。
为此,本申请的发明人采用了框架开发的思想,将任务抽象成一个配置框架,具体地,将任务划分成多个子任务,并将各个子任务封装成对应的逻辑单元,根据各子任务之间的处理逻辑设置逻辑单元之间的依赖关系,为此,每个逻辑单元中除了封装有执行的处理流程对应的代码外,还封装有监听代码,用于监听根据依赖关系确定的位于其上一级的逻辑单元的执行情况,在监听结果满足触发条件时,自动触发该逻辑单元执行其内部的处理流程。当需要执行某项任务时,只需要调用该目标任务对应的配置框架(即任务配置文件),根据配置框架的逻辑单元,创建对应的逻辑单元实例,并根据各逻辑单元之间的依赖关系,确定各逻辑单元实例之间的依赖关系,从而得到目标任务的任务模块,实现对任务的延迟加载。完成任务模块的加载后,将目标任务的业务数据输入任务模块中的第一级逻辑单元实例,并获得任务模块中最后一级逻辑单元实例输出的业务处理结果,其中,各逻辑单元实例根据任务模块中的依赖关系确定位于其上一级的逻辑单元实例,并在根据上一级的逻辑单元实例的执行情况确定满足触发条件时,对上一级逻辑单元实例的输出数据执行相应的处理并输出处理结果。上述方式,在配置框架内的各逻辑单元内部封装了处理各逻辑单元之间的逻辑关系的代码,开发者只需要预先配置好各逻辑单元之间的依赖关系,配置框架会自动生成逻辑单元实例之间的依赖关系,逻辑单元实例会根据生成的依赖关系自动监听位于其上一级的逻辑单元实例的执行情况,进而决定是否触发执行其内部的处理流程,通过这样的方式各逻辑单元实例对业务数据逐级处理,最终得到业务处理结果。因此,开发者通过配置框架封装的方式以及简单的依赖关系,即可实现对各逻辑单元实例的逻辑控制,无需编写大量的控制代码,降低了维护逻辑单元实例间的依赖关系的成本,进而使得开发者可以将更多精力投入到各逻辑单元内部的业务实现中。
在介绍完本申请实施例的设计思想之后,下面对本申请实施例的技术方案能够适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本申请实施例而非限定。在具体实施时,可以根据实际需要灵活地应用本申请实施例提供的技术方案。
本申请实施例提供的任务处理方法可应用于任意一种可以将提供的业务服务划分成多个子任务的应用场景中,例如,信息搜索、信息推荐、机器人交互服务、云计算服务、网络信贷服务等。
参考图1,其为本申请实施例提供的任务处理方法的应用场景示意图。该应用场景包括终端设备101和服务器102。上述终端设备101通过无线或有线网络与服务器102连接。服务器102可以是一台服务器,也可以是若干台服务器组成的服务器集群或云计算中心。
用户启动终端设备101上安装的应用,该应用响应于用户的操作生成业务请求,并通过终端设备101向服务器102发送该业务请求。服务器102获取到业务请求后,确定需执行的目标任务并获取该目标任务对应的业务数据,调用目标任务对应的任务模块,将业务数据输入任务模块得到业务处理结果,并将业务处理结果反馈该终端设备101。终端设备101显示业务处理结果或者根据业务处理结果执行相应的响应。其中,目标任务对应的业务数据可以是业务请求中携带的业务数据,也可以是服务器102根据目标任务从服务器102本地或其它存储业务数据的服务器中获取到的数据。其中,响应的方式不限于播放多媒体文件、进行语音播报、执行控制指令等,其中,控制指令包括但不限于:控制终端设备执行动作的指令(如引领、导航、拍照、跳舞等)、在终端设备的屏幕上展示道具或特效的指令、控制智能家居的指令、打印业务处理结果的指令等,具体的响应方式可根据终端设备101提供的业务服务设置,本申请实施例不作限定。
此外,目标任务对应的任务模块也可以存储在终端设备101内部,用户启动终端设备101上安装的应用,该应用响应于用户的操作确定需要执行的目标任务,并从终端设备101内调用该目标任务对应的任务模块,将业务数据输入任务模块得到业务处理结果,显示业务处理结果或者根据业务处理结果执行相应的响应。其中,可在安装应用时,直接生成目标任务对应的任务模块并存储在终端设备101本地,或者,在用户通过应用首次触发目标任务时,从服务器102中获取对应的任务模块并存储在终端设备101本地。
本申请实施例提供的方法可在服务器侧执行,也可以在终端设备侧执行,还可以由服务器和终端设备配合执行,本申请实施例不对执行主体进行限定。为了便于描述,本申请提供的各实施例中均以在服务器侧执行任务处理方法为例进行说明,在终端设备侧执行任务处理方法的过程与此类似,此处不再赘述。
当然,本申请实施例提供的方法并不限用于图1所示的应用场景中,还可以用于其它可能的应用场景,本申请实施例并不进行限制。对于图1所示的应用场景的各个设备所能实现的功能将在后续的方法实施例中一并进行描述,在此先不过多赘述。
为进一步说明本申请实施例提供的技术方案,下面结合附图以及具体实施方式对此进行详细的说明。虽然本申请实施例提供了如下述实施例或附图所示的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多或者更少的操作步骤。在逻辑上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本申请实施例提供的执行顺序。
下面结合图1所示的应用场景,对本申请实施例提供的技术方案进行说明。
在开发过程中,开发者可根据具体执行的任务,将任务划分成多个子任务,并将各个子任务封装成对应的逻辑单元,根据各子任务之间的处理逻辑设置逻辑单元之间的依赖关系,各逻辑单元是否触发依赖于根据上述依赖关系确定的位于其上一级的逻辑单元的执行情况确定。为此,每个逻辑单元中除了封装有执行处理流程对应的代码外,还封装有监听代码,用于监听根据依赖关系确定的位于其上一级的逻辑单元的执行情况,在监听结果满足触发条件时,自动触发该逻辑单元执行相应的处理流程。
示例性地,参考图2A,其提供了对任务进行串行划分的方式,即将任务P划分为P1、P2、P3、P4四个串行执行的子任务,对应的依赖关系为P1→P2→P3→P4,其中,箭头表示依赖关系,被指向方依赖指向方,例如P2依赖于P1、P3依赖于P2,即需要根据P1的执行情况确定是否执行P2,根据P2的执行情况确定是否执行P3,以此类推,最终得到P4的输出数据,作为最终处理结果。参考图2B,其提供了对任务进行并行划分的方式,即将任务P划分为P1、P2、P3、P4四个子任务,对应的依赖关系为P1→P4,P2→P4,P3→P4,即需要根据P1、P2和P3的执行情况才能确定是否执行P4,最终得到P4的输出数据,作为最终处理结果。参考图2C,其提供了更为通用的串并行划分方式,任务P被划分为P1、P2、P3、P4、P5、P6、P7七个子任务,图2C中箭头的方向为七个子任务之间的依赖关系,即,根据P1的执行情况确定是否执行P2,根据P1和P3的执行情况确定是否执行P4,根据P1的执行情况确定是否执行P5,根据P4和P5的执行情况确定是否执行P6,根据P6的执行情况确定是否执行P7,最终得到P2和P7的输出数据,作为最终处理结果。
参考图3,为本申请实施例提供的应用于任务处理方法的一种配置框架的结构示意图。
控制器组件用于控制对处理器组件和关系组件。
关系组件用于维护配置框架中所有逻辑单元之间的依赖关系。
执行组件用于管理该配置框架中每个逻辑单元内部执行的处理流程的代码,开发者可通过执行组件编写各逻辑单元内部的代码。
数据组件用于管理整个任务处理过程中需要处理的数据,包括:输入的业务数据和中间处理结果(即逻辑单元的输出数据)。
处理器组件用于管理该配置框架中所有的逻辑单元,通过数据组件获取各逻辑单元需要处理的数据,并通过执行组件调用各逻辑单元对应的代码,以对从数据组件获取的数据进行处理。
处理结果组件用于存储每个逻辑单元的输出数据,包括中间处理结果和最终处理结果,数据组件可从处理结果组件中获取中间处理结果并存储。每个逻辑单元的输出数据可包括:返回码、返回信息、处理耗时等。
开发者可基于上述配置框架完成对任务的代码编写工作,大部分的代码逻辑已经由配置框架规定好,开发者需要做的是如下工作:
(1)通过关系组件设定逻辑单元之间的依赖关系;
(2)根据各子任务之间的处理逻辑,指定每个逻辑单元需要处理的数据,即指定好处理器组件中每个逻辑单元的输入数据,以便从数据组件中获取相应的数据;
(3)编写每个逻辑模块对应的代码,并为处理器组件管理的每一个逻辑单元提供一个func()*Processor类型的创建函数,以便在任务启动时,调用配置框架提供的RegisterProcessorCreater(name string,fn func()*Processor)注册函数完成对执行组件中提供的各个逻辑单元的注册,后续可根据注册的创建函数创建对应的逻辑单元实例。
完成上述工作后,即可得到任务对应的任务配置文件。后续在需要执行某一项任务时,只需要调取该任务对应的任务配置文件,即可自动创建对应的框架实例,即创建图3所示的各组件对应的实例,通过创建的实例执行相应的处理逻辑,完成对业务数据的处理。
因此,开发者通过配置框架封装的方式,只需设置简单的依赖关系,即可实现对各逻辑单元的逻辑控制,无需编写大量的控制代码,降低了维护逻辑单元实例间的依赖关系的成本,进而使得开发者可以将更多精力投入到各逻辑单元的业务实现中。
具体实施时,执行组件中的每个逻辑单元的功能均是不同的,即相同功能的逻辑单元,开发者只需要编写一次代码。而针对不同的任务或者不同的子任务划分方式,处理器组件中注册的不同的逻辑单元可以执行相同功能的,但是为其指定的输入数据不同,即处理器组件可重复调用执行组件中的同一逻辑单元,创建多个逻辑单元实例,对不同的输入数据进行相同的处理。
例如,当某一输入数据的数据量较大时,可创建多个功能相同的逻辑单元实例,将输入数据分成多个批次,同时输入这多个逻辑单元实例中进行处理,实现分批并行处理输入数据,提高处理效率,参考图4A,输入数据分为三批D1、D2和D3,逻辑单元实例M1-1、M1-2和M1-3使用的是执行组件中同一个逻辑单元的代码创建的,将输入数据D1、D2和D3分别输入M1-1、M1-2和M1-3进行处理。或者,在一项任务中,需要逐级对输入数据进行相同的处理,此时可创建多个功能相同的逻辑单元实例,各逻辑单元实例的输入数据不同,参考图4B所示的工作流程图,逻辑单元实例M2-1和逻辑单元实例M2-2使用的是执行组件中同一个逻辑单元的代码创建的,M2-1和M2-2中的处理流程相同,所不同的是,M2-1的输入数据为逻辑单元实例M1的输出数据,M2-2的输入数据为逻辑单元实例M3的输出数据。
因此,通过上述配置框架封装的方式,针对相同功能的逻辑单元,开发者只需要在处理器组件中进行简单的配置,即可复用之前编写的逻辑代码,提高了开发者的并行开发效率,实现快速开发。
基于上述的配置框架,参考图5,本申请实施例提供一种任务处理方法,包括以下步骤:
S501、获取目标任务对应的业务数据,该目标任务包括多个子任务。
具体实施时,用户启动终端设备上安装的应用,应用响应于用户的操作生成业务请求,并通过终端设备向服务器发送该业务请求;服务器获取到业务请求后,确定需执行的目标任务并获取该目标任务对应的业务数据。
具体地,终端设备发送的业务请求中可以携带需要处理的业务数据,例如,目标任务为图像识别时,业务请求中可以携带需要识别的图像。为此,具体实施例时,可从业务请求中获取目标任务对应的业务数据。
具体实施时,还可以根据目标任务从服务器中获取相应的业务数据。例如,目标任务为视频推荐,此时可从服务器中获取相关数据,例如视频类型、视频热门值、用户对视频的偏好、用户历史观看记录等,根据获取到的相关数据确定向用户推荐的视频,并推送给用户的终端设备。
S502、获取该目标任务的任务模块,该任务模块包括多个逻辑单元实例,每个逻辑单元实例对应目标任务中的一个子任务,各逻辑单元实例之间具有设定的依赖关系,该依赖关系根据多个子任务之间的处理逻辑设置。
作为一种可能的实施方式,参考图6,可通过如下方式获取目标任务的任务模块:
S601、获取目标任务的任务配置文件,该任务配置文件中包括目标任务的各子任务对应的逻辑单元,以及各逻辑单元之间的依赖关系。
S602、根据任务配置文件中的逻辑单元,创建对应的逻辑单元实例。
S603、根据各逻辑单元之间的依赖关系,确定各逻辑单元实例之间的依赖关系。
具体实施时,任务配置文件可以是在以图3为例的配置框架的基础上获得的。根据处理器组件中注册的创建函数,创建对应的逻辑单元实例,根据各逻辑单元之间的依赖关系,确定各逻辑单元实例之间的依赖关系,并保存在关系组件实例中。以图2C为例,其中每一个子任务对应一个逻辑单元,针对各逻辑单元创建对应的逻辑单元实例,根据图2C所揭示的各逻辑单元的依赖关系,得到如图7所示的各逻辑单元实例之间的依赖关系。
在确定出各逻辑单元实例之间的依赖关系后,还需要对依赖关系进行检查,为此,获取目标任务的任务模块具体还包括如下步骤:
S604、确定各逻辑单元实例之间的依赖关系是否为有向无环图;若是有向无环图,则完成任务模块的创建;若不是有向无环图,则执行步骤S605。
S605、生成错误提示信息。
具体地,可将步骤S605中生成的错误提示信息发送给开发者,通知开发者进行修改和维护。
通过图6所示的方式,服务器在接收到终端设备的业务请求时,完成对目标任务的任务模块的延时加载。
作为另一种可能的实施方式,服务器可存储通过图6所示的方法创建的任务模块。服务器在接收到终端设备的业务请求时,确定业务请求对应的目标任务,从服务器存储的任务模块中查询到目标任务对应的任务模块,以减少获取任务模块的时间。
当服务器支持的任务类型较多时,可仅存储最近创建的任务模块或使用频率较高的任务模块。在获取目标任务的任务模块时,从存储的任务模块中查询该目标任务的任务模块;若查询到该目标任务的任务模块,则直接获取该任务模块;若未查询到该目标任务的任务模块,则获取该目标任务的任务配置文件,通过图6所示的方法创建该目标任务的任务模块。
S503、将业务数据输入任务模块中的第一级逻辑单元实例,并获得最后一级逻辑单元实例输出的业务处理结果,其中,各逻辑单元实例根据依赖关系确定位于其上一级的逻辑单元实例,并在根据上一级的逻辑单元实例的执行情况确定满足触发条件时,对上一级逻辑单元实例的输出数据执行相应的处理并输出处理结果。
本申请实施例中,任务模块中的第一级逻辑单元实例的执行不依赖于其他逻辑单元的执行情况,即第一级逻辑单元实例为整个任务执行过程中第一个执行的逻辑单元实例。任务模块中的最后一级逻辑单元实例没有被依赖的逻辑单元实例。
具体实施时,一个任务模块中可以设置一个或多个第一级逻辑单元实例。当一个任务模块中可以设置多个第一级逻辑单元实例时,还需要按照处理逻辑将业务数据划分为多个部分,并预先指定各部分数据对应的第一逻辑单元实例。
具体实施还是,一个任务模块中可以设置一个或多个最后一级逻辑单元实例。例如,当任务最终需要获取到多种不同的处理结果时,就可以设置多个最后一级逻辑单元实例。
举例说明,图7所示的任务模块中,M1和M3没有依赖于任何一个逻辑单元,所以M1和M3为第一级逻辑单元实例,M1和M3的输入数据为业务数据;M2和M7没有被任何一个逻辑单元依赖,所以M2和M7为最后一级逻辑单元实例;其余逻辑单元实例(包括M4、M5、M6)为中间层级的逻辑单元实例。
具体地,获取到目标任务的任务模块之后,将业务数据输入任务模块,各逻辑单元实例同时开始执行内部的逻辑代码。参考图8,各逻辑单元实例内部执行的步骤如下:
S801、根据依赖关系确定位于其上一级的逻辑单元实例。
S802、监听上一级的逻辑单元实例的执行情况。
S803、根据上一级的逻辑单元实例的执行情况,判断是否满足触发条件;若满足触发条件,则执行步骤S804;若不满足触发条件,则返回步骤S802,继续监听。
S804、对上一级逻辑单元实例的输出数据执行相应的处理并输出处理结果。
具体实施时,各逻辑单元实例输出的处理结果均存储到根据数据组件创建的数据组件实例中,以便其他逻辑单元实例从数据组件实例中获取需要的数据进行处理。
S805、执行完对应的处理流程后,判断是否存在下一级逻辑单元实例,若存在,则执行步骤S806。
S806、向位于其下一级的逻辑单元实例发送已执行完的通知消息。
具体实施时,步骤S803具体包括:根据上一级的逻辑单元实例发送的已执行完的通知消息,判断是否满足触发条件。当然,也可以根据数据组件实例中是否存在上一级的逻辑单元实例输出的处理结果,来确定上一级的逻辑单元的执行情况。
具体实施时,触发条件可以是:上一级的逻辑单元实例均已执行完对应的处理流程。
实际应用中,存在逻辑单元实例执行超时的情况,这种情况下,若下一级逻辑单元实例不需要基于该逻辑单元实例的处理结果也可以进行数据处理时,下一级逻辑单元实例可在判断其上一级逻辑单元实例已超时的情况下,执行相应的处理流程,以避免出现无法得到业务处理结果的情况。为此,触发条件还可以是:上一级的逻辑单元实例的执行时间均已超时,或者上一级的逻辑单元实例中的部分逻辑单元实例已执行完对应的处理流程且另一部分逻辑单元实例的执行时间已超时。
具体实施时,开发者可预先设定哪些逻辑单元实例超时后,其下一级逻辑单元实例依旧可以执行相应的处理流程,而哪些逻辑单元实例超时后,其下一级逻辑单元实例不可以执行相应的处理流程。
本申请实施例的任务处理方法,在配置框架内的各逻辑单元内部封装了处理各逻辑单元之间的逻辑关系的代码,开发者只需要预先配置好各逻辑单元之间的依赖关系,配置框架会自动生成逻辑单元实例之间的依赖关系,逻辑单元实例会根据生成的依赖关系自动监听位于其上一级的逻辑单元实例的执行情况,进而决定是否触发执行其内部的处理流程,通过这样的方式各逻辑单元实例对业务数据逐级处理,最终得到业务处理结果。因此,开发者通过配置框架封装的方式以及简单的依赖关系,即可实现对各逻辑单元实例的逻辑控制,无需编写大量的控制代码,降低了维护逻辑单元实例间的依赖关系的成本,进而使得开发者可以将更多精力投入到各逻辑单元内部的业务实现中。由于依赖关系的配置方式十分简便,因此,开发者可以将任务划分为粒度更细的子任务,以实现更高效的并行处理效率。
当一项任务需要对多种类别的业务数据进行处理时,为了方便开发者管理处理不同类别的业务数据对应的逻辑单元,提出了工作流的概念,一个工作流为一种类别的业务数据所需要的所有逻辑单元的集合,每个工作流都对应唯一的工作流标识,以便在实例化时能够区分开不同的工作流。一项任务中可仅包含一个工作流,也可以包含多个工作流。同一工作流中的逻辑单元之间存在依赖关系,不同工作流之间的逻辑单元间也可以存在依赖关系。
以图2C为例,P1和P2分别对应的逻辑单元组成一个工作流Line1,P3、P4、P5、P6和P7分别对应的逻辑单元组成一个工作流Line2。line1中,P2对应的逻辑单元依赖于P1对应的逻辑单元,Line2中,P4对应的逻辑单元依赖于P3对应的逻辑单元。Line2中的P4对应的逻辑单元依赖于Line1中的P1对应的逻辑单元。
为此,目标任务对应的任务配置文件中还包括目标任务所需处理的业务数据的类别,以及每种类别的业务数据对应的工作流。其中,每个工作流包括处理对应类别的业务数据所需的至少一个逻辑单元。
当某一类别的业务数据的数据量较大时,可根据该类别的业务数据对应的工作流,创建多个相同的工作流实例。相应地,将该类别的业务数据分成多个组,每一个工作流实例处理其中的一组业务数据,实现分组并行处理数据,提高处理效率。
具体实施时,一个工作流对应创建的工作流实例的数量,可由开发者根据一项任务实际处理的数据量预先设定,在创建任务模块时,再创建对应数量个工作流实例。还可以在获取到目标任务后,根据目标任务对应的业务数据的数据量,实时确定需要创建的工作流实例的数量。
作为一种可能的实施方式,参考图9,基于上述任务配置文件,可通过如下步骤创建目标任务的任务模块:
S901、根据各类别的业务数据的数据量,确定各工作流对应的工作流数量N。
具体实施时,针对每个工作流,开发者可预先设定每个工作流实例处理的数据量的上限值Max。针对各类别的业务数据,将该类别的业务数据的数据量除以对应的上限值Max,根据相除结果确定工作流对应的工作流数量N。示例性地,若相除结果为整数时,则N等于相除结果,若相除结果为非整数时,则N等于相除结果的整数部分加1,例如,若相除结果为2,则N=2,若相除结果为2.3,则N=3。
S902、针对每个工作流,确定N个与该工作流相同的工作流实例。
本申请实施例中,每一工作流实例的构成与其对应的工作流完全相同,即每个工作流实例职工包含的逻辑单元以及逻辑单元之前的依赖关系与其对应的工作流完全相同,区别仅在于不同工作流实例的输入数据为同一类别的业务数据中不同的组。
S903、根据各工作流实例中的逻辑单元,创建对应的逻辑单元实例。
以图10为例,其为根据图2C对应的工作流Line1和Line2创建的逻辑单元实例。其中,工作流Line1对应一个工作流实例Line1,工作流实例Line1中包含逻辑单元实例M1和M2,M1是根据P1对应的逻辑单元创建的,M2是根据P2对应的逻辑单元创建的。工作流Line2对应两个工作流实例Line2_1和Line2_2,Line2_1包括逻辑单元实例M4_1、M5_1、M6_1和M7_1,Line2_2包括逻辑单元实例M4_2、M5_2、M6_2和M7_2,例如,M4_1和M4_2是根据P4对应的逻辑单元创建的,两者执行的功能相同,M5_1和M5_2是根据P5对应的逻辑单元创建的。
S904、针对每个工作流实例,根据其对应的工作流中的逻辑单元之间的依赖关系,确定该工作流实例中的逻辑单元实例之间的依赖关系。
具体实施时,工作流实例中的逻辑单元实例之间的依赖关系,与该工作流实例对应的工作流中的逻辑单元之间的依赖关系对应。
以图10为例,工作流Line1中的逻辑单元之间的依赖关系为P1→P2,则其对应的工作流实例Line1中各逻辑单元实例之间的依赖关系为M1→M2。工作流Line2中的逻辑单元之间的依赖关系为P3→P4→P6→P7和P3→P5→P6,则工作流实例Line2_1中各逻辑单元实例之间的依赖关系为M4_1→M5_1→M6_1→M7_1和M3_1→M5_1→M6_1,工作流实例Line2_2中各逻辑单元实例之间的依赖关系为M4_2→M5_2→M6_2→M7_2和M3_2→M5_2→M6_2。
S905、针对每个工作流实例,根据其对应的工作流中的逻辑单元与其他工作流中的逻辑单元的依赖关系,确定该工作流实例中的逻辑单元实例与其他工作流实例中的逻辑单元实例之间的依赖关系。
以图10为例,工作流Line1和Line2之间的逻辑单元的依赖关系为P1→P4,则对应的工作流实例Line1中的逻辑单元实例M1和工作流实例Line2_1中的逻辑单元实例M4_1之间的依赖关系为M1→M4_1,工作流实例Line1中的逻辑单元实例M1和工作流实例Line2_2中的逻辑单元实例M4_2之间的依赖关系为M1→M4_2。
最终,任务模块中的依赖关系包括:通过步骤S904确定出的各工作流实例中的逻辑单元实例之间的依赖关系,以及通过步骤S905确定出的各工作流实例中的逻辑单元实例与其他工作流实例中的逻辑单元实例之间的依赖关系。
S906、根据各类别的业务数据对应的N,将各类别的业务数据划分为N组。
S907、确定每个工作流实例对应的业务数据的类别以及组别,并确定每个工作流实例中的各逻辑单元实例对应的输入数据。
以图10为例,针对工作流Line1创建了1个工作流实例Line1,则将工作流Line1对应的业务数据S1作为工作流实例Line1的输入数据。针对工作流Line2创建了两个工作流实例,为此,将工作流Line2对应的业务数据S2划分成两组数据S2_1和S2_2,数据组S2_1作为工作流实例Line2_1的输入数据,数据组S2_2作为工作流实例Line2_2的输入数据。
在执行完步骤S904和S905后,还可以对通过步骤S904和S905确定出的依赖关系进行检查,具体还包括如下步骤:确定各逻辑单元实例之间的依赖关系是否为有向无环图;若是有向无环图,则完成任务模块的创建;若不是有向无环图,则生成错误提示信息。具体地,可将该错误提示信息发送给开发者,通知开发者进行修改和维护。
通过图9所示的方法,可根据待处理的业务数据的数据量,创建适合数量的工作流实例,实现分组并行处理数据,提高处理效率。
如图11所示,基于与上述任务处理方法相同的发明构思,本申请实施例还提供了一种任务处理装置110,包括:数据获取模块1101、任务调用模块1102和数据处理模块1103。
数据获取模块1101,用于获取目标任务对应的业务数据,所述目标任务包括多个子任务;
任务调用模块1102,用于获取所述目标任务的任务模块,所述任务模块包括多个逻辑单元实例,每个逻辑单元实例对应所述目标任务中的一个子任务,各逻辑单元实例之间具有设定的依赖关系,所述依赖关系根据所述多个子任务之间的处理逻辑设置;
数据处理模块1103,用于将所述业务数据输入所述任务模块中的第一级逻辑单元实例;并获得最后一级逻辑单元实例输出的业务处理结果,其中,各逻辑单元实例根据所述依赖关系确定位于其上一级的逻辑单元实例,并在根据上一级的逻辑单元实例的执行情况确定满足触发条件时,对上一级逻辑单元实例的输出数据执行相应的处理并输出处理结果。
可选地,所述任务调用模块1102具体用于:
获取所述目标任务的任务配置文件,所述任务配置文件中包括所述目标任务的各子任务对应的逻辑单元,以及各逻辑单元之间的依赖关系;
根据所述任务配置文件中的逻辑单元,创建对应的逻辑单元实例;
根据所述各逻辑单元之间的依赖关系,确定各逻辑单元实例之间的依赖关系。
可选地,所述任务配置文件还包括所述目标任务所需处理的业务数据的类别,以及每种类别的业务数据对应的工作流,每个工作流包括处理对应类别的业务数据所需的至少一个逻辑单元。
相应地,所述任务调用模块1102具体用于:
根据各类别的业务数据的数据量,确定各工作流对应的工作流数量N;
针对每个工作流,确定N个与所述工作流相同的工作流实例;
根据各工作流实例中的逻辑单元,创建对应的逻辑单元实例;
针对每个工作流实例,根据其对应的工作流中的逻辑单元之间的依赖关系,确定所述工作流实例中的逻辑单元实例之间的依赖关系;
针对每个工作流实例,根据其对应的工作流中的逻辑单元与其他工作流中的逻辑单元的依赖关系,确定所述工作流实例中的逻辑单元实例与其他工作流实例中的逻辑单元实例之间的依赖关系;
根据各类别的业务数据对应的N,将各类别的业务数据划分为N组;
确定每个工作流实例对应的业务数据的类别以及组别,并确定每个工作流实例中的各逻辑单元实例对应的输入数据。
可选地,所述任务调用模块1102还用于:
在确定出各逻辑单元实例之间的依赖关系后,确定所述各逻辑单元实例之间的依赖关系是否为有向无环图;
若不是有向无环图,则生成错误提示信息。
可选地,数据处理模块1103,还用于:各逻辑单元实例执行完对应的处理流程后,向位于其下一级的逻辑单元实例发送已执行完的通知消息;
相应地,所述数据处理模块1103具体用于:根据上一级的逻辑单元实例发送的已执行完的通知消息,确定满足触发条件。
可选地,所述触发条件包括:所述上一级的逻辑单元实例均已执行完对应的处理流程,或者所述上一级的逻辑单元实例的执行时间均已超时,或者所述上一级的逻辑单元实例中的部分逻辑单元实例已执行完对应的处理流程且另一部分逻辑单元实例的执行时间已超时。
本申请实施例提的任务处理装置与上述任务处理方法采用了相同的发明构思,能够取得相同的有益效果,在此不再赘述。
基于与上述任务处理方法相同的发明构思,本申请实施例还提供了一种电子设备,该电子设备具体可以为终端设备内部的控制设备或控制系统,也可以是与终端设备通信的外部设备,如可以为桌面计算机、便携式计算机、智能手机、平板电脑、个人数字助理(Personal Digital Assistant,PDA)、服务器等。如图12所示,该电子设备120可以包括处理器1201和存储器1202。
处理器1201可以是通用处理器,例如中央处理器(CPU)、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器1202作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random Access Memory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器1202还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
本申请实施例提供了一种计算机可读存储介质,用于储存为上述电子设备所用的计算机程序指令,其包含用于执行上述弹幕处理方法的程序。
上述计算机存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD))等。
以上,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本申请实施例的方法,不应理解为对本申请实施例的限制。本技术领域的技术人员可轻易想到的变化或替换,都应涵盖在本申请实施例的保护范围之内。
Claims (7)
1.一种任务处理方法,其特征在于,包括:
获取目标任务对应的业务数据,所述目标任务包括多个子任务;
从存储的任务模块中查询所述目标任务的任务模块,若查询到所述目标任务的任务模块,则获取所述目标任务的任务模块,若未查询到所述目标任务的任务模块,则创建所述目标任务的任务模块,所述任务模块包括多个逻辑单元实例,每个逻辑单元实例对应所述目标任务中的一个子任务,各逻辑单元实例之间具有设定的依赖关系,所述依赖关系根据所述多个子任务之间的处理逻辑设置;
将所述业务数据输入所述任务模块中的第一级逻辑单元实例;并
获得最后一级逻辑单元实例输出的业务处理结果,其中,各逻辑单元实例根据所述依赖关系确定位于其上一级的逻辑单元实例,监听上一级的逻辑单元实例的执行情况,并在根据上一级的逻辑单元实例的执行情况确定满足触发条件时,对上一级逻辑单元实例的输出数据执行相应的处理并输出处理结果,若不满足所述触发条件,则继续监听上一级的逻辑单元实例的执行情况;
所述创建所述目标任务的任务模块,具体包括:
获取所述目标任务的任务配置文件,所述任务配置文件中包括所述目标任务的各子任务对应的逻辑单元,以及各逻辑单元之间的依赖关系;其中,每个逻辑单元中封装有执行处理流程对应的代码以及监听代码,所述监听代码用于监听根据所述依赖关系确定的位于其上一级的逻辑单元的执行情况,在监听结果满足触发条件时,触发该逻辑单元执行相应的处理流程;
根据所述任务配置文件中的逻辑单元,创建对应的逻辑单元实例;
根据所述各逻辑单元之间的依赖关系,确定各逻辑单元实例之间的依赖关系;
所述任务配置文件还包括所述目标任务所需处理的业务数据的类别,以及每种类别的业务数据对应的工作流,每个工作流包括处理对应类别的业务数据所需的至少一个逻辑单元;
根据各类别的业务数据的数据量以及各工作流处理的数据量的上限值,确定各工作流对应的工作流数量N;
针对每个工作流,确定N个与所述工作流相同的工作流实例;
根据各工作流实例中的逻辑单元,创建对应的逻辑单元实例;
针对每个工作流实例,根据其对应的工作流中的逻辑单元之间的依赖关系,确定所述工作流实例中的逻辑单元实例之间的依赖关系;
针对每个工作流实例,根据其对应的工作流中的逻辑单元与其他工作流中的逻辑单元的依赖关系,确定所述工作流实例中的逻辑单元实例与其他工作流实例中的逻辑单元实例之间的依赖关系;
根据各类别的业务数据对应的N,将各类别的业务数据划分为N组;
确定每个工作流实例对应的业务数据的类别以及组别,并确定每个工作流实例中的各逻辑单元实例对应的输入数据。
2.根据权利要求1所述的方法,其特征在于,还包括:
在确定出各逻辑单元实例之间的依赖关系后,确定所述各逻辑单元实例之间的依赖关系是否为有向无环图;
若不是有向无环图,则生成错误提示信息。
3.根据权利要求1所述的方法,其特征在于,还包括:
各逻辑单元实例执行完对应的处理流程后,向位于其下一级的逻辑单元实例发送已执行完的通知消息;
所述根据上一级的逻辑单元实例的执行情况确定满足触发条件,具体包括:
根据上一级的逻辑单元实例发送的已执行完的通知消息,确定满足触发条件。
4.根据权利要求1或3所述的方法,其特征在于,所述触发条件包括:所述上一级的逻辑单元实例均已执行完对应的处理流程,或者所述上一级的逻辑单元实例的执行时间均已超时,或者所述上一级的逻辑单元实例中的部分逻辑单元实例已执行完对应的处理流程且另一部分逻辑单元实例的执行时间已超时。
5.一种任务处理装置,其特征在于,包括:
数据获取模块,用于获取目标任务对应的业务数据,所述目标任务包括多个子任务;
任务调用模块,用于从存储的任务模块中查询所述目标任务的任务模块,若查询到所述目标任务的任务模块,则获取所述目标任务的任务模块,若未查询到所述目标任务的任务模块,则创建所述目标任务的任务模块,所述任务模块包括多个逻辑单元实例,每个逻辑单元实例对应所述目标任务中的一个子任务,各逻辑单元实例之间具有设定的依赖关系,所述依赖关系根据所述多个子任务之间的处理逻辑设置;
数据处理模块,用于将所述业务数据输入所述任务模块中的第一级逻辑单元实例;并获得最后一级逻辑单元实例输出的业务处理结果,其中,各逻辑单元实例根据所述依赖关系确定位于其上一级的逻辑单元实例,监听上一级的逻辑单元实例的执行情况,并在根据上一级的逻辑单元实例的执行情况确定满足触发条件时,对上一级逻辑单元实例的输出数据执行相应的处理并输出处理结果,若不满足所述触发条件,则继续监听上一级的逻辑单元实例的执行情况;
所述任务调用模块具体用于:
获取所述目标任务的任务配置文件,所述任务配置文件中包括所述目标任务的各子任务对应的逻辑单元,以及各逻辑单元之间的依赖关系;其中,每个逻辑单元中封装有执行处理流程对应的代码以及监听代码,所述监听代码用于监听根据所述依赖关系确定的位于其上一级的逻辑单元的执行情况,在监听结果满足触发条件时,触发该逻辑单元执行相应的处理流程;
根据所述任务配置文件中的逻辑单元,创建对应的逻辑单元实例;
根据所述各逻辑单元之间的依赖关系,确定各逻辑单元实例之间的依赖关系;
所述任务配置文件还包括所述目标任务所需处理的业务数据的类别,以及每种类别的业务数据对应的工作流,每个工作流包括处理对应类别的业务数据所需的至少一个逻辑单元;
根据各类别的业务数据的数据量,确定各工作流对应的工作流数量N;
针对每个工作流,确定N个与所述工作流相同的工作流实例;
根据各工作流实例中的逻辑单元,创建对应的逻辑单元实例;
针对每个工作流实例,根据其对应的工作流中的逻辑单元之间的依赖关系,确定所述工作流实例中的逻辑单元实例之间的依赖关系;
针对每个工作流实例,根据其对应的工作流中的逻辑单元与其他工作流中的逻辑单元的依赖关系,确定所述工作流实例中的逻辑单元实例与其他工作流实例中的逻辑单元实例之间的依赖关系;
根据各类别的业务数据对应的N,将各类别的业务数据划分为N组;
确定每个工作流实例对应的业务数据的类别以及组别,并确定每个工作流实例中的各逻辑单元实例对应的输入数据。
6.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4任一项所述方法的步骤。
7.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,该计算机程序指令被处理器执行时实现权利要求1至4任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910683418.XA CN111176802B (zh) | 2019-07-26 | 2019-07-26 | 任务处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910683418.XA CN111176802B (zh) | 2019-07-26 | 2019-07-26 | 任务处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111176802A CN111176802A (zh) | 2020-05-19 |
CN111176802B true CN111176802B (zh) | 2023-03-14 |
Family
ID=70648684
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910683418.XA Active CN111176802B (zh) | 2019-07-26 | 2019-07-26 | 任务处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111176802B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113760476B (zh) * | 2020-06-04 | 2024-02-09 | 广州虎牙信息科技有限公司 | 任务依赖处理方法及相关装置 |
CN111581111A (zh) * | 2020-06-04 | 2020-08-25 | 网易(杭州)网络有限公司 | 实例创建方法、装置、存储介质、处理器及电子装置 |
CN111553545B (zh) * | 2020-07-13 | 2020-10-27 | 四川新网银行股份有限公司 | 一种优化批量任务调度依赖的方法 |
CN112099768B (zh) * | 2020-08-04 | 2024-02-23 | 北京奇艺世纪科技有限公司 | 业务流程处理方法、装置及计算机可读存储介质 |
CN111967849A (zh) * | 2020-08-19 | 2020-11-20 | 支付宝(杭州)信息技术有限公司 | 一种任务处理流程编排方法、装置及电子设备 |
CN114257701A (zh) * | 2020-09-23 | 2022-03-29 | 北京字节跳动网络技术有限公司 | 视频处理算法的接入配置方法、设备及存储介质 |
CN112596720A (zh) * | 2020-12-25 | 2021-04-02 | 第四范式(北京)技术有限公司 | 业务运行方法、装置、电子设备和计算机存储介质 |
CN112801771A (zh) * | 2021-01-08 | 2021-05-14 | 深圳乐信软件技术有限公司 | 授信处理方法、装置、设备和介质 |
CN112817744A (zh) * | 2021-01-14 | 2021-05-18 | 内蒙古蒙商消费金融股份有限公司 | 一种任务处理方法及装置 |
CN112819577A (zh) * | 2021-01-28 | 2021-05-18 | 长沙市到家悠享网络科技有限公司 | 依赖关系可视化方法、装置、设备和存储介质 |
CN113010531B (zh) * | 2021-02-05 | 2022-11-01 | 成都库珀创新科技有限公司 | 一种基于有向无环图的区块链baas系统任务调度框架 |
CN113326030A (zh) * | 2021-05-26 | 2021-08-31 | 北京京东拓先科技有限公司 | 一种业务请求的处理方法和装置 |
CN113283983A (zh) * | 2021-06-11 | 2021-08-20 | 中国农业银行股份有限公司 | 业务处理方法、装置及设备 |
CN113946321B (zh) * | 2021-10-18 | 2023-03-14 | 易保网络技术(上海)有限公司 | 计算逻辑的处理方法、电子设备和可读存储介质 |
CN114327818B (zh) * | 2021-12-23 | 2024-03-26 | 广州钛动科技有限公司 | 一种算法调度方法、装置、设备及可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101567013A (zh) * | 2009-06-02 | 2009-10-28 | 阿里巴巴集团控股有限公司 | 一种etl调度的实现方法及装置 |
CN105243528A (zh) * | 2015-09-15 | 2016-01-13 | 普元信息技术股份有限公司 | 大数据环境下金融it系统中图形化集中对账系统与方法 |
CN105976158A (zh) * | 2016-04-26 | 2016-09-28 | 中国电子科技网络信息安全有限公司 | 一种可视化的etl流程管理与调度监控方法 |
CN109408216A (zh) * | 2018-11-12 | 2019-03-01 | 北京字节跳动网络技术有限公司 | 任务生成方法、装置、设备及存储介质 |
CN109684053A (zh) * | 2018-11-05 | 2019-04-26 | 广东岭南通股份有限公司 | 大数据的任务调度方法和系统 |
CN109902117A (zh) * | 2019-02-19 | 2019-06-18 | 新华三大数据技术有限公司 | 业务系统分析方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844380A (zh) * | 2015-12-04 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 一种数据库操作方法、信息处理方法和相应装置 |
-
2019
- 2019-07-26 CN CN201910683418.XA patent/CN111176802B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101567013A (zh) * | 2009-06-02 | 2009-10-28 | 阿里巴巴集团控股有限公司 | 一种etl调度的实现方法及装置 |
CN105243528A (zh) * | 2015-09-15 | 2016-01-13 | 普元信息技术股份有限公司 | 大数据环境下金融it系统中图形化集中对账系统与方法 |
CN105976158A (zh) * | 2016-04-26 | 2016-09-28 | 中国电子科技网络信息安全有限公司 | 一种可视化的etl流程管理与调度监控方法 |
CN109684053A (zh) * | 2018-11-05 | 2019-04-26 | 广东岭南通股份有限公司 | 大数据的任务调度方法和系统 |
CN109408216A (zh) * | 2018-11-12 | 2019-03-01 | 北京字节跳动网络技术有限公司 | 任务生成方法、装置、设备及存储介质 |
CN109902117A (zh) * | 2019-02-19 | 2019-06-18 | 新华三大数据技术有限公司 | 业务系统分析方法和装置 |
Non-Patent Citations (1)
Title |
---|
浅谈调度工具-Airflow;a7f00a9019ae;《简书网:https://www.jianshu.com/p/e878bbc9ead2》;20171123;第1-11页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111176802A (zh) | 2020-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111176802B (zh) | 任务处理方法、装置、电子设备及存储介质 | |
CN110502229B (zh) | 页面的生成方法、装置、终端、计算机设备和存储介质 | |
US8065659B1 (en) | Method and apparatus for executing scripts within a web browser | |
US20180052723A1 (en) | Middleware Interface and Middleware Interface Generator | |
CN111897539A (zh) | 一种根据服务角色的进行应用部署的方法及装置 | |
CN109408136A (zh) | 信息处理方法、装置、存储介质及电子设备 | |
US20220156050A1 (en) | Generating a synchronous digital circuit from a source code construct defining a function call | |
CN107562496B (zh) | 一种页面配置以及页面展示的方法及装置 | |
CN113377348A (zh) | 应用于任务引擎的任务调整方法、相关装置和存储介质 | |
CN113448728B (zh) | 一种云资源调度方法、装置、设备及存储介质 | |
CN110597564A (zh) | 一种安装包构建和业务组件加载方法、装置、终端设备 | |
CN111258565A (zh) | 小程序的生成方法、系统、服务器及存储介质 | |
US11610155B2 (en) | Data processing system and data processing method | |
CN110764752A (zh) | 基于微服务架构实现Restful服务图形化服务编排的系统及其方法 | |
CN111221630A (zh) | 业务流程处理方法、装置、设备、可读存储介质及系统 | |
CN111459621B (zh) | 云仿真集成与调度方法、装置、计算机设备和存储介质 | |
JP2019509567A (ja) | アプリケーション(app)のためのリソースロード方法、サービス機能実施方法及び装置 | |
CN113094125B (zh) | 业务流程处理方法、装置、服务器及存储介质 | |
CN111988429A (zh) | 算法调度方法以及系统 | |
CN115016769A (zh) | 基于领域驱动设计的脚手架的搭建方法以及应用开发方法 | |
CN114896637A (zh) | 一种数据处理方法、装置、电子设备和存储介质 | |
CN114968422A (zh) | 基于变量状态自动执行合约的方法和装置 | |
CN111221560B (zh) | 一种资源管理方法、装置和电子设备 | |
CN109150993B (zh) | 一种获取网络请求切面的方法、终端装置及存储介质 | |
CN113050962A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |