掌桥专利:专业的专利平台
掌桥专利
首页

一种批量任务处理方法及装置

文献发布时间:2023-06-19 12:24:27


一种批量任务处理方法及装置

技术领域

本申请实施例涉及金融科技(Fintech)领域,尤其涉及一种批量任务处理方法及装置。

背景技术

随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。在金融领域中,新增批量任务时,需要配置各任务的执行时间,根据配置的执行时间(即任务的起始运行时间)执行对应的任务。

相关技术中,任务执行过程,基于运维人员的经验设置新的执行时间,并将新的执行时间上传,从而实现对任务执行时间的调整。然而,这种处理方式由于不同运维人员的经验不同,可能会出现新的执行时间不合理的问题。例如:各预设队列中任务分配不均衡,导致有些预设队列运行任务时过于空闲,有些预设队列运行任务时过于繁忙;或者预设队列中各任务的起始运行时间设置不合理,有些任务需要先执行却排到预设队列的后面,有些任务不需要先执行却排到预设队列的前面。

综上,目前亟需一种批量任务处理方法,用以合理调整批量任务的执行时间。

发明内容

本申请实施例提供了一种批量任务处理方法及装置,用以合理调整批量任务的执行时间。

第一方面,本申请实施例提供了一种批量任务处理方法,该方法包括:

基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中;

针对任一预设队列,根据所述预设队列中各任务在第一时段内的历史平均起始运行时间以及第一历史平均运行时长,确定所述预设队列中各任务的目标起始运行时间,并基于所述目标起始运行时间,运行对应任务。

上述技术方案中,由于任务的第一历史平均运行时长,表征了该任务在第一时段的运行时长的长短,在一定程度反映了后续运行该任务的所需的时长,因此根据第一历史平均运行时长以及预设队列的数量,将任务分配至各个预设队列中,使各预设队列运行任务时不会过于空闲或者过于繁忙;由于任务的历史平均起始运行时间,表征了该任务在第一时段的起始运行的先后,在一定程度反映了后续起始运行该任务的先后,因此根据预设队列中各任务的历史平均起始运行时间以及第一历史平均运行时长,确定预设队列中各任务的目标起始运行时间,进而通过较为合理的先后顺序运行预设队列中的任务,合理调整批量任务中每个任务的执行时间。

可选地,基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中,包括:

将所述批量任务中各任务按照所述第一历史平均运行时长从短到长进行排序;

基于排序结果,多批次从所述批量任务中选择预设队列的数量的任务,分配至各个所述预设队列中;

若任一预设队列中所有任务的第一历史平均运行时长之和与目标运行时长的比例超过预设比例,则不再将任务分配至所述预设队列中;所述目标运行时长为根据所述批量任务中所有任务的第一历史平均运行时长总和以及所述预设队列的数量确定的。

上述技术方案中,通过多批次从批量任务中选择预设队列的数量的任务,可以将任务按照数量均衡地分配至各个预设队列中;由于预设队列中所有任务的第一历史平均运行时长之和较多时,不再将任务分配至该预设队列中,保证了各预设队列中所有任务的第一历史平均运行时长之和的均衡性,使得各预设队列中所有任务的第一历史平均运行时长之和不会过多或者过少,进一步保证了各预设队列运行任务时不会过于空闲或者过于繁忙。

可选地,针对任一批次,从所述批量任务中选择预设队列的数量的任务,分配至各个所述预设队列中,包括:

选择在中位值之前,且与所述中位值相邻的预设队列的数量的第一历史平均运行时长对应的任务,依次分配至各个所述预设队列中;其中,所述中位值为所述批量任务的第一历史平均运行时长中的中位值;

选择在所述中位值之后,且与中位值相邻的预设队列的数量的第一历史平均运行时长对应的任务,依次分配至各个所述预设队列中。

上述技术方案中,通过选择在中位值之前,且与中位值相邻的第一历史平均运行时长对应的任务,将选择的任务按第一历史平均运行时长从长到短依次分配至各个所述预设队列中;通过选择在中位值之后,且与中位值相邻的预设队列的数量的第一历史平均运行时长对应的任务,将选择的任务按第一历史平均运行时长从短到长依次分配至各个所述预设队列中,使得每批次都将任务按照第一历史平均运行时长较为均衡地分配至各个预设队列中。

可选地,根据所述预设队列中各任务在第一时段内的历史平均起始运行时间以及第一历史平均运行时长,确定所述预设队列中各任务的目标起始运行时间,包括:

若所述预设队列中有目标任务,则将所述预设队列中目标任务按照被依赖的次数从多到少进行排序,其中,任一目标任务为执行其他任务所依赖的任务;将所述预设队列中除所述目标任务之外的任务排在所述目标任务之后,且将除所述目标任务之外的任务按照历史平均起始运行时间从前到后进行排序;或者

若所述预设队列中没有目标任务,则将所述预设队列中各任务按照历史平均起始运行时间从前到后进行排序;

根据所述预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,确定下一任务的目标起始运行时间,其中所述预设队列中第一个任务的目标起始运行时间是对应的历史平均起始运行时间,或者预设的起始运行时间。

上述技术方案中,如果预设队列中有目标任务,目标任务被依赖的次数表征了有多少其他任务依赖该目标任务,通过将被依赖的次数多的目标任务排到前面,后续可以先运行被依赖的次数多的目标任务,进而保证较多的其他任务的正常运行;由于目标任务之外的任务不影响其他任务的正常运行,因此将这些任务排在目标任务之后,另外,这些任务的历史平均起始运行时间,在一定程度反映了后续起始运行这些任务的先后,因此,将这些任务按照历史平均起始运行时间从前到后进行排序。如果预设队列中没有目标任务,各任务的历史平均起始运行时间,表征了该任务在第一时段的起始运行的先后,在一定程度反映了后续起始运行该任务的先后,因此,将各任务按照历史平均起始运行时间从前到后进行排序。在将预设队列中的任务排序完成后,就确定了运行各任务的先后顺序,由于各任务的第一历史平均运行时长,在一定程度反映了后续运行该任务的所需的时长,因此根据预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,较为合理地确定出下一任务的目标起始运行时间。通过将预设队列中第一个任务的历史平均起始运行时间,或者预设的起始运行时间,作为其目标起始运行时间,从而适用于不同场景的需求。

可选地,在基于所述目标起始运行时间,运行对应任务之前,还包括:

将单线程执行的任务的第一历史平均运行时长,以及在第二时段内的第二历史平均运行时长进行比对,所述第二时段为所述第一时段之前的时段;

若所述第一历史平均运行时长相比于所述第二历史运行时长的增幅大于预设增幅,则将所述单线程执行的任务切换为多线程执行。

上述技术方案中,第二时段为所述第一时段之前的时段,如果单线程执行的任务的第一历史平均运行时长,相比于该单线程执行的任务在第二时段内的第二历史运行时长的增幅大于预设增幅,说明该单线程执行的任务运行时长增长较多,通过将单线程执行的任务切换为多线程执行,可以减少后续运行该任务的所需的时长。

可选地,所述方法还包括:

响应重跑指令,基于所述重跑指令对应的预设表征机构的信息,执行所述重跑指令对应的任务。

上述技术方案中,收到重跑指令,即可确定对应的预设表征机构的信息,以及对应的任务,从而基于对应的预设表征机构的信息执行对应的任务,无需在每次进行任务重跑时编写重跑代码。

可选地,基于所述目标起始运行时间,运行对应任务,包括:

针对任一任务,若所述任务对应有依赖信息,则在所述任务的目标起始运行时间达到后,基于预设的对应关系确定所述任务对应的目标依赖规则;其中所述对应关系包括预设的依赖信息与依赖规则的关联;

针对任一预设表征机构的信息,根据所述目标依赖规则,确定是否基于所述预设表征机构的信息执行完成对应的目标任务,其中,所述对应的目标任务为执行所述任务所依赖的任务;

在确定基于所述预设表征机构的信息执行完成对应的目标任务后,根据所述任务的计算信息,对所述预设表征机构的信息对应的待处理数据进行处理。

上述技术方案中,通过提前预设依赖规则,并预设依赖信息以及依赖规则的对应关系,根据任务的依赖信息可直接确定对应的依赖规则,这样在编写任务的计算信息时,就无需编写任务对应的依赖规则,方便依赖规则的管理。

第二方面,本申请实施例还提供了一种批量任务处理装置,包括:

任务分配单元,用于基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中;

运行处理单元,用于针对任一预设队列,根据所述预设队列中各任务在第一时段内的历史平均起始运行时间以及第一历史平均运行时长,确定所述预设队列中各任务的目标起始运行时间,并基于所述目标起始运行时间,运行对应任务。

第三方面,本申请实施例提供一种计算设备,包括至少一个处理器以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述第一方面任一所述的批量任务处理方法。

第四方面,本申请实施例提供一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述第一方面任一所述的批量任务处理方法。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的第一种批量任务处理方法的流程示意图;

图2为本申请实施例提供的第二种批量任务处理方法的流程示意图;

图3为本申请实施例提供的第三种批量任务处理方法的流程示意图;

图4为本申请实施例提供的第四种批量任务处理方法的流程示意图;

图5为本申请实施例提供的第五种批量任务处理方法的流程示意图;

图6为本申请实施例提供的一种批量任务处理装置的结构示意图;

图7为本申请实施例提供的一种计算设备的结构示意图。

具体实施方式

为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

本申请实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。

在本申请的描述中,除非另有明确的规定和限定,术语“连接”应做广义理解,例如,可以是直接相连,也可以通过中间媒介间接相连,可以是两个器件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。

术语“执行时间”是指任务的起始运行时间,在一些实施例中直接用“起始运行时间”指代“执行时间”。

新增批量任务时,需要配置各任务的执行时间,根据配置的执行时间执行对应的任务。相关技术中,任务执行过程,基于运维人员的经验设置新的执行时间,并将新的执行时间上传,从而实现对任务执行时间的调整。

然而,这种处理方式由于不同运维人员的经验不同,可能会出现新的执行时间不合理的问题,例如:各预设队列中任务分配不均衡,导致有些预设队列运行任务时过于空闲,有些预设队列运行任务时过于繁忙;或者预设队列中各任务的起始运行时间设置不合理,有些任务需要先执行却排到预设队列的后面,有些任务不需要先执行却排到预设队列的前面。

鉴于此,本申请实施例提出一种批量任务处理方法及装置,该方法包括:基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中;针对任一预设队列,根据所述预设队列中各任务在第一时段内的历史平均起始运行时间以及第一历史平均运行时长,确定所述预设队列中各任务的目标起始运行时间,并基于所述目标起始运行时间,运行对应任务。

由于任务的第一历史平均运行时长,表征了该任务在第一时段的运行时长的长短,在一定程度反映了后续运行该任务的所需的时长,因此根据第一历史平均运行时长以及预设队列的数量,将任务分配至各个预设队列中,使各预设队列运行任务时不会过于空闲或者过于繁忙;由于任务的历史平均起始运行时间,表征了该任务在第一时段的起始运行的先后,在一定程度反映了后续起始运行该任务的先后,因此根据预设队列中各任务的历史平均起始运行时间以及第一历史平均运行时长,确定预设队列中各任务的目标起始运行时间,进而通过较为合理的先后顺序运行预设队列中的任务,合理调整批量任务中每个任务的执行时间。

下面将结合附图及具体实施例,对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。

本申请实施例提供第一种批量任务处理方法,如图1所示,包括以下步骤:

步骤S101:基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中。

由于任务的第一历史平均运行时长,表征了该任务在第一时段的运行时长的长短,在一定程度反映了后续运行该任务的所需的时长,因此根据第一历史平均运行时长以及预设队列的数量,确定各预设队列中的任务,使各预设队列运行任务时不会过于空闲或者过于繁忙。

上述第一时段可以根据实际应用场景进行设定,如当前时刻之前的一个星期,对应的,任一任务的第一历史平均运行时长,为这一个星期中每天运行该任务的时长的平均值,如:任务1的第一历史平均运行时长

本实施例对确定各预设队列中的任务的具体实现方式不做限定,一些可选的实施方式中,预设队列中的任务满足以下至少一个条件:

1)任一预设队列中所有任务的第一历史平均运行时长之和与目标运行时长的比例小于预设比例;其中,所述目标运行时长为根据所述批量任务中所有任务的第一历史平均运行时长总和以及所述预设队列的数量确定的。以批量任务包括100个任务,有4个预设队列(分别记作预设队列a、预设队列b、预设队列c以及预设队列d),预设比例为1.25为例:

这100个任务的第一历史平均运行时长总和记作

由于各预设队列中所有任务的第一历史平均运行时长之和与目标运行时长的比例都小于上述预设比例,因此各预设队列中所有任务的第一历史平均运行时长之和不会过多或者过少(如上述A

2)任意两个预设队列中任务数量之间的差值不超过预设数量差值。还是以上述4个预设队列为例,其中预设数量差值为10:

预设队列a中任务数量记作B

由于任意两个预设队列中任务数量之间的差值不超过预设数量差值,因此各预设队列中任务数量不会过多或者过少(如上述B

可以理解,上述批量任务中任务的数量、预设队列的数量、预设比例以及预设数量差值都只是示例性说明,这些参数的具体数值都可根据实际应用场景设置,本申请并不以此为限。

为了使预设队列中的任务满足上述条件,还是以上述批量任务包括100个任务,有4个预设队列为例,本申请示例性提供了以下两种确定各预设队列中的任务的方式:

方式一:

将这100个任务按照第一历史平均运行时长从短到长进行排序,排序后分别记作任务1、任务2、任务3、……任务99、任务100;其中,任务1的第一历史平均运行时长为

确定100个第一历史平均运行时长中的中位值

从经过上述选择剩余的92个任务中,选择中位值之前,且与中位值相邻的4个第一历史平均运行时长对应的任务(即上述任务46、任务45、任务44以及任务43),分别作为预设队列a、预设队列b、预设队列c以及预设队列d中的任务;并选择中位值之后且与中位值相邻的4个第一历史平均运行时长对应的任务(即上述任务55、任务56、任务57以及任务58),分别作为预设队列a、预设队列b、预设队列c以及预设队列d中的任务;

经过多次选择后,如果有预设队列中的任务的第一历史运行时长之和与目标运行时长的比例达到预设比例,就不再选择该预设队列中的任务;如上述预设队列b中的任务的第一历史运行时长之和与目标运行时长的比例达到预设比例,从剩余的任务中,选择中位值之前,且与中位值相邻的3个第一历史平均运行时长对应的任务,分别作为预设队列a、预设队列c以及预设队列d中的任务;并选择中位值之后且与中位值相邻的3个第一历史平均运行时长对应的任务,分别作为预设队列a、预设队列c以及预设队列d中的任务,直到确定出这100个任务各自的预设队列。

方式二:

将这100个任务按照第一历史平均运行时长从短到长进行排序,排序后分别记作任务1、任务2、任务3、……任务99、任务100;其中,任务1的第一历史平均运行时长为

按照排序结果,依次选择4个任务(即上述任务1、任务2、任务3以及任务4),分别作为预设队列a、预设队列b、预设队列c以及预设队列d中的任务;

从第一次选择后剩余的96个任务中,依次选择4个任务(即上述任务5、任务6、任务7以及任务8),分别作为预设队列d、预设队列c、预设队列b以及预设队列a中的任务;

从第二次选择后剩余的92个任务中,依次选择4个任务(即上述任务9、任务10、任务11以及任务12),分别作为预设队列a、预设队列b、预设队列c以及预设队列d中的任务;

经过多次选择后,如果有预设队列中的任务的第一历史运行时长之和与目标运行时长的比例达到预设比例,就不再选择该预设队列中的任务;如上述预设队列a中的任务的第一历史运行时长之和与目标运行时长的比例达到预设比例,从剩余的任务中,依次选择3个任务,分别作为预设队列b、预设队列c以及预设队列d中的任务,直到确定出这100个任务各自的预设队列。

上述方式一以及方式二都是将批量任务按照第一历史平均运行时长从短到长进行排序,在一些实施例中,也可将批量任务按照第一历史平均运行时长从长到短进行排序,确定各预设队列中的任务的方式可参照上述方式一以及方式二,此处不再赘述。

另外,本实施例对触发执行S101的方式不做限定,可以基于用户指令触发;或者间隔固定时长触发,即每周期定时执行一次批量任务处理方法,如每天凌晨执行一次批量任务处理方法,确定这一天中各任务的目标起始运行时间。

步骤S102:针对任一预设队列,根据所述预设队列中各任务在第一时段内的历史平均起始运行时间以及第一历史平均运行时长,确定所述预设队列中各任务的目标起始运行时间,并基于所述目标起始运行时间,运行对应任务。

由于任务的历史平均起始运行时间,表征了该任务在第一时段的起始运行的先后,在一定程度反映了后续起始运行该任务的先后,因此根据预设队列中各任务的历史平均起始运行时间以及第一历史平均运行时长,确定预设队列中各任务的目标起始运行时间,通过较为合理的先后顺序运行预设队列中的任务。

如上所述,第一时段可以根据实际应用场景进行设定,还是以当前时刻之前的一个星期为例,对应的,任一任务的历史平均起始运行时间,为这一个星期中每天起始运行该任务的时间的平均值,如任务1的历史平均起始运行时间

示例性的,执行上述方法的装置,在启动时会将批量任务一一加载到Quartz(一种开源作业调度框架)内,并通过Spring(一种开源的容器框架)进行管理。在确定上述预设队列中各任务的目标起始运行时间后,更新到任务配置表;通过单独配置一个监测任务每隔一定时间去读取一次任务配置表中未加载生效的任务配置信息(目标起始运行时间),读取到对应任务配置信息后先去检查该任务是否已执行(已按照历史起始运行时间执行该任务)或正在执行(正在按照历史起始运行时间执行该任务),如果已执行或正在执行,就无需按照目标起始运行时间再次执行该任务;如果未执行,按照目标起始运行时间更新该任务的触发器,并重新加载到装置中,从而及时动态调整批量任务的执行时间。

上述技术方案中,由于任务的第一历史平均运行时长,表征了该任务在第一时段的运行时长的长短,在一定程度反映了后续运行该任务的所需的时长,因此根据第一历史平均运行时长以及预设队列的数量,确定各预设队列中的任务,使各预设队列运行任务时不会过于空闲或者过于繁忙;由于任务的历史平均起始运行时间,表征了该任务在第一时段的起始运行的先后,在一定程度反映了后续起始运行该任务的先后,因此根据预设队列中各任务的历史平均起始运行时间以及第一历史平均运行时长,确定预设队列中各任务的目标起始运行时间,通过较为合理的先后顺序运行预设队列中的任务,从而合理调整批量任务中每个任务的执行时间(即起始运行时间)。

针对预设队列中有目标任务的情况(目标任务为执行其他任务需要依赖的任务),本申请实施例提供第二种批量任务处理方法,如图2所示,包括以下步骤:

步骤S201:基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中。

该步骤S201的具体实现方式可参照上述步骤S101,此处不再赘述。

步骤S202:针对任一预设队列,若所述预设队列中有目标任务,则将所述预设队列中目标任务按照被依赖的次数从多到少进行排序。

本实施例,如果预设队列中有目标任务,目标任务被依赖的次数表征了有多少其他任务依赖该目标任务,通过将被依赖的次数多的目标任务排到前面,后续可以先运行被依赖的次数多的目标任务,进而保证较多的其他任务的正常运行。

示例性的,预设队列a中有5个目标任务(分别记作目标任务1、目标任务2、目标任务3、目标任务4以及目标任务5),其中,目标任务1被依赖的次数为5,目标任务2被依赖的次数为3,目标任务3被依赖的次数为1,目标任务4被依赖的次数为6,目标任务5被依赖的次数为2,这5个目标任务的排序结果为:目标任务4、目标任务1、目标任务2、目标任务5、目标任务3。

上述预设队列a中的目标任务,以及各目标任务被依赖的次数只是示例性说明,本申请并不以此为限。

一些具体的实施例中,预设队列中有些目标任务被依赖的次数相同,这时可以将被依赖的次数相同的目标任务随机排序;或者将被依赖的次数相同的目标任务,按照历史平均起始运行时间从前到后进行排序。

步骤S203:将所述预设队列中除所述目标任务之外的任务排在所述目标任务之后,且将除所述目标任务之外的任务按照历史平均起始运行时间从前到后进行排序。

由于目标任务之外的任务不影响其他任务的正常运行,因此将这些任务排在目标任务之后,另外,这些任务的历史平均起始运行时间,在一定程度反映了后续起始运行这些任务的先后,因此,可将这些任务按照历史平均起始运行时间从前到后进行排序。

还是以上述预设队列a为例:

预设队列a中除了上述5个目标任务之外,还有7个其他的任务(分别记作普通任务1、普通任务2、普通任务3、普通任务4、普通任务5、普通任务6以及普通任务7),其中,这7个任务按照历史平均起始运行时间从前到后分别为:普通任务2、普通任务7、普通任务6、普通任务1、普通任务4、普通任务5、普通任务3。

预设队列a中所有任务的排序结果为:目标任务4、目标任务1、目标任务2、目标任务5、目标任务3、普通任务2、普通任务7、普通任务6、普通任务1、普通任务4、普通任务5、普通任务3。

上述预设队列a中的任务、目标任务被依赖的次数以及历史平均起始运行时间的前后都只是示例性说明,本申请并不以此为限。

步骤S204:根据所述预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,确定下一任务的目标起始运行时间,其中所述预设队列中第一个任务的目标起始运行时间是对应的历史平均起始运行时间,或者预设的起始运行时间。

在将预设队列中的任务排序完成后,就确定了运行各任务的先后顺序,由于各任务的第一历史平均运行时长,在一定程度反映了后续运行该任务的所需的时长,因此根据预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,较为合理地确定出下一任务的目标起始运行时间。

本实施例对根据预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,确定下一任务的目标起始运行时间的具体实现方式不做限定,示例性的,可将前一任务的目标起始运行时间之后的第一历史平均运行时长对应的时间,作为确定下一任务的目标起始运行时间。

步骤S205:基于所述目标起始运行时间,运行对应任务。

上述技术方案中,如果预设队列中有目标任务,目标任务被依赖的次数表征了有多少其他任务依赖该目标任务,通过将被依赖的次数多的目标任务排到前面,后续可以先运行被依赖的次数多的目标任务,进而保证较多的其他任务的正常运行;由于目标任务之外的任务不影响其他任务的正常运行,因此将这些任务排在目标任务之后,另外,这些任务的历史平均起始运行时间,在一定程度反映了后续起始运行这些任务的先后,因此,将这些任务按照历史平均起始运行时间从前到后进行排序。在将预设队列中的任务排序完成后,就确定了运行各任务的先后顺序,由于任务的第一历史平均运行时长,在一定程度反映了后续运行该任务的所需的时长,因此根据预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,较为合理地确定出下一任务的目标起始运行时间。通过将预设队列中第一个任务的历史平均起始运行时间,或者预设的起始运行时间,作为其目标起始运行时间,从而适用于不同场景的需求。

针对预设队列中没有目标任务的情况,本申请实施例提供第三种批量任务处理方法,如图3所示,包括以下步骤:

步骤S301:基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中。

步骤S302:若所述预设队列中没有目标任务,则将所述预设队列中各任务按照历史平均起始运行时间从前到后进行排序。

步骤S303:根据所述预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,确定下一任务的目标起始运行时间,其中所述预设队列中第一个任务的目标起始运行时间是对应的历史平均起始运行时间,或者预设的起始运行时间。

步骤S304:基于所述目标起始运行时间,运行对应任务。

该步骤S301-304的具体实现方式可参照上述实施例,此处不再赘述。

上述技术方案中,如果预设队列中没有目标任务,任务的历史平均起始运行时间,表征了该任务在第一时段的起始运行的先后,在一定程度反映了后续起始运行该任务的先后,因此,将各任务按照历史平均起始运行时间从前到后进行排序。在将预设队列中的任务排序完成后,就确定了运行各任务的先后顺序,由于各任务的第一历史平均运行时长,在一定程度反映了后续运行该任务的所需的时长,因此根据预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,较为合理地确定出下一任务的目标起始运行时间。通过将预设队列中第一个任务的历史平均起始运行时间,或者预设的起始运行时间,作为其目标起始运行时间,从而适用于不同场景的需求。

本申请实施例提供第四种批量任务处理方法,如图4所示,包括以下步骤:

步骤S401:基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中。

该步骤S401的具体实现方式可参照上述实施例,此处不再赘述。

步骤S402:将单线程执行的任务的第一历史平均运行时长,以及在第二时段内的第二历史平均运行时长进行比对,所述第二时段为所述第一时段之前的时段。

实施中,上述第二时段为第一时段之前的时段,第二时段与第一时段的时长可以相同可以不同,第二时段可以为一个,也可以为多个。如果有多个第二时段,需要将单线程执行的任务的第一历史平均运行时长,分别与该单线程执行的任务在各第二时段内的第二历史平均运行时长进行比对。

还是以第一时段为当前时刻之前的一个星期为例,第二时段可以包括以下至少一项:

1)当前时刻之前一个星期再往前算起的一个星期,如当前时刻是5月第3个星期三的凌晨;第一时段为5月第2个星期三的凌晨到5月第3个星期三的凌晨;第二时段为5月第1个星期三的凌晨到5月第2个星期三的凌晨。

2)当前时刻之前一个月再往前算起的一个星期,如当前时刻是5月第3个星期三的凌晨;第一时段为5月第2个星期三的凌晨到5月第3个星期三的凌晨;第二时段为4月第2个星期三的凌晨到4月第3个星期三的凌晨。

上述第二时段只是示例性说明,第二时段的数量以及具体的第二时段可以根据实际应用场景设定。

步骤S403:若所述第一历史平均运行时长相比于所述第二历史运行时长的增幅大于预设增幅,则将所述单线程执行的任务切换为多线程执行。

如上所述,如果有多个第二时段,需要将单线程执行的任务的第一历史平均运行时长,分别与该单线程执行的任务在各第二时段内的第二历史平均运行时长进行比对。实施中,如果满足第一历史平均运行时长,相比于在部分或者全部第二时段内的第二历史运行时长的增幅大于预设增幅,将对应的单线程执行的任务切换为多线程执行。

单线程执行的任务的第一历史平均运行时长,相比于该单线程执行的任务在第二时段内的第二历史运行时长的增幅,反映了该单线程执行的任务运行时长增长的多少。如果单线程执行的任务的第一历史平均运行时长,相比于该单线程执行的任务在第二时段内的第二历史运行时长的增幅大于预设增幅,说明该单线程执行的任务运行时长增长较多。

如果上述单线程执行的任务可以通过多线程执行,为了避免后续运行该任务的所需的时长继续过长,可将该单线程执行的任务切换为多线程执行,减少后续运行该任务的所需的时长。

步骤S404:针对任一预设队列,根据所述预设队列中各任务在第一时段内的历史平均起始运行时间以及第一历史平均运行时长,确定所述预设队列中各任务的目标起始运行时间,并基于所述目标起始运行时间,运行对应任务。

上述技术方案中,第二时段为所述第一时段之前的时段,如果单线程执行的任务的第一历史平均运行时长,相比于该单线程执行的任务在第二时段内的第二历史运行时长的增幅大于预设增幅,说明该单线程执行的任务运行时长增长较多,通过将单线程执行的任务切换为多线程执行,可以减少后续运行该任务的所需的时长。

本申请实施例提供第五种批量任务处理方法,如图5所示,包括以下步骤:

步骤S501:基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中。

步骤S502:针对任一预设队列,根据所述预设队列中各任务在第一时段内的历史平均起始运行时间以及第一历史平均运行时长,确定所述预设队列中各任务的目标起始运行时间。

该步骤S501-502的具体实现方式可参照上述实施例,此处不再赘述。

步骤S503:针对任一任务,在所述任务的目标起始运行时间达到后,依次基于各预设表征机构的信息,执行所述任务。

为了实现共享开发和维护成本,多租户架构被广泛应用在金融领域中,多租户架构是在多租户(机构)环境下共用相同的系统或程序组件,并且可确保各机构间数据的隔离性。一些实施例中,新增批量任务时,需要配置任务对应的机构信息,执行任务时确定任务对应的机构,基于对应的机构来执行该任务。然而,开发人员可能会忘记配置批量任务中的某些任务对应的机构信息,这样就无法保证不同机构的数据隔离。

基于此,本实施例通过在执行上述方法的装置中提前预设表征机构的相关信息,这样,开发人员在编写任务的计算信息时,就无需编写任务对应的机构信息,也就不会存在漏配某些任务对应的机构信息的问题。

示例性的,在执行批量任务处理方法的装置中实现一个任务基类F,并提供一个抽象方法M进行具体机构的任务调度,所有任务都继承任务基类F。执行任一任务时,均调度到上述任务基类F的统一入口;进入这个入口后,首先遍历所有的预设表征机构的相关信息,依次基于各预设表征机构的信息,在M方法内调用接口I的N方法,从而执行对应的任务(将预设表征机构的信息对应的待处理数据通过该任务的计算信息进行计算,得到计算数据)。

如上所述,执行一些任务需要依赖目标任务,针对任一预设表征机构的信息,可通过以下方式执行所述任务:

针对任一任务,若所述任务对应有依赖信息,则在所述任务的目标起始运行时间达到后,基于预设的对应关系确定所述任务对应的目标依赖规则;其中所述对应关系包括预设的依赖信息与依赖规则的关联;

针对任一预设表征机构的信息,根据所述目标依赖规则,确定是否基于所述预设表征机构的信息执行完成对应的目标任务,其中,所述对应的目标任务为执行所述任务所依赖的任务;

在确定基于所述预设表征机构的信息执行完成对应的目标任务后,根据所述任务的计算信息,对所述预设表征机构的信息对应的待处理数据进行处理。

示例性的,任务内定义接口I的变量属性(即任务的计算信息,以任务1为例),处理单个机构(以机构A为例)时会调度到基类S内(即依次基于各预设表征机构的信息,在M方法被调用接口I的N方法),通过基类S,先确定任务1是否对应有依赖信息,如果有依赖信息,根据预设的对应关系(预设的依赖信息与依赖规则的关联),确定任务1对应的目标依赖规则(实施中,可以预设多个依赖规则,如同类型的批量任务依赖、机构之间文件传输任务的依赖、内部数据同步任务的依赖等);根据目标依赖规则得到目标任务的起始运行时间,进而确定是否基于上述机构A执行完成对应的目标任务,如果基于上述机构A执行完成对应的目标任务,根据任务1的计算信息,对机构A对应的待处理数据(待处理数据包括基于机构A执行完成上述目标任务所得到的计算结果),进行处理,得到基于机构A执行任务1所得到的计算结果。

通过提前预设依赖规则,并预设依赖信息以及依赖规则的对应关系,根据任务的依赖信息可直接确定对应的依赖规则,这样开发人员在编写任务的计算信息时,就无需编写任务对应的依赖规则,方便依赖规则的管理。

上述技术方案中,多租户架构需要进行不同机构的数据隔离,通过提前预设表征机构的相关信息,开发人员在编写任务的计算信息时,就无需编写任务对应的机构信息,在任务的目标起始运行时间达到后,依次基于各预设表征机构的信息,执行任务,实现了不同机构的数据隔离。避免了因开发人员漏配任务对应的机构信息,而导致不能基于机构维度执行该任务,影响不同机构的数据隔离。

另外,在基于预设表征机构的信息执行任务时,可能会发生错误,这时需要重新基于该预设表征机构的信息执行该任务(即任务重跑)。一些实施例中,需要开发人员在每次进行任务重跑时编写重跑代码,从而执行上述方法的装置根据重跑代码,再次基于该预设表征机构的信息执行该任务。但是每次进行任务重跑时都要编写重跑代码较为繁琐,且容易编写错误的重跑代码。

基于此,一些可选的实施方式中,上述方法还包括:

响应重跑指令,基于所述重跑指令对应的预设表征机构的信息,执行所述重跑指令对应的任务。

执行重跑指令对应的任务的具体实现方式与上述步骤S503类似,区别仅在于针对重跑指令,不用基于目标起始运行时间执行对应任务,也不用依次基于各预设表征机构的信息,而是基于重跑指令对应的预设表征机构的信息,执行重跑指令对应的任务,此处不再赘述。

上述技术方案中,收到重跑指令,即可确定对应的预设表征机构的信息,以及对应的任务,从而基于对应的预设表征机构的信息执行对应的任务,无需在每次进行任务重跑时编写重跑代码。

基于相同的发明构思,本申请实施例提供一种批量任务处理装置,参阅图6所示,批量任务处理装置600包括:

任务分配单元601,用于基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中;

运行处理单元602,用于针对任一预设队列,根据所述预设队列中各任务在第一时段内的历史平均起始运行时间以及第一历史平均运行时长,确定所述预设队列中各任务的目标起始运行时间,并基于所述目标起始运行时间,运行对应任务。

可选地,任务分配单元601具体用于:

将所述批量任务中各任务按照所述第一历史平均运行时长从短到长进行排序;

基于排序结果,多批次从所述批量任务中选择预设队列的数量的任务,分配至各个所述预设队列中;

若任一预设队列中所有任务的第一历史平均运行时长之和与目标运行时长的比例超过预设比例,则不再将任务分配至所述预设队列中;所述目标运行时长为根据所述批量任务中所有任务的第一历史平均运行时长总和以及所述预设队列的数量确定的。

可选地,任务分配单元601具体用于:

选择在中位值之前,且与所述中位值相邻的预设队列的数量的第一历史平均运行时长对应的任务,依次分配至各个所述预设队列中;其中,所述中位值为所述批量任务的第一历史平均运行时长中的中位值;

选择在所述中位值之后,且与中位值相邻的预设队列的数量的第一历史平均运行时长对应的任务,依次分配至各个所述预设队列中。

可选地,运行处理单元602具体用于:

若所述预设队列中有目标任务,则将所述预设队列中目标任务按照被依赖的次数从多到少进行排序,其中,任一目标任务为执行其他任务所依赖的任务;将所述预设队列中除所述目标任务之外的任务排在所述目标任务之后,且将除所述目标任务之外的任务按照历史平均起始运行时间从前到后进行排序;或者

若所述预设队列中没有目标任务,则将所述预设队列中各任务按照历史平均起始运行时间从前到后进行排序;

根据所述预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,确定下一任务的目标起始运行时间,其中所述预设队列中第一个任务的目标起始运行时间是对应的历史平均起始运行时间,或者预设的起始运行时间。

可选地,运行处理单元602在基于所述目标起始运行时间,运行对应任务之前,还用于:

将单线程执行的任务的第一历史平均运行时长,以及在第二时段内的第二历史平均运行时长进行比对,所述第二时段为所述第一时段之前的时段;

若所述第一历史平均运行时长相比于所述第二历史运行时长的增幅大于预设增幅,则将所述单线程执行的任务切换为多线程执行。

可选地,运行处理单元602还用于:

响应重跑指令,基于所述重跑指令对应的预设表征机构的信息,执行所述重跑指令对应的任务。

可选地,运行处理单元602具体用于:

针对任一任务,若所述任务对应有依赖信息,则在所述任务的目标起始运行时间达到后,基于预设的对应关系确定所述任务对应的目标依赖规则;其中所述对应关系包括预设的依赖信息与依赖规则的关联;

针对任一预设表征机构的信息,根据所述目标依赖规则,确定是否基于所述预设表征机构的信息执行完成对应的目标任务,其中,所述对应的目标任务为执行所述任务所依赖的任务;

在确定基于所述预设表征机构的信息执行完成对应的目标任务后,根据所述任务的计算信息,对所述预设表征机构的信息对应的待处理数据进行处理。

由于该装置即是本申请实施例中的方法中的装置,并且该装置解决问题的原理与该方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

基于相同的技术构思,本申请实施例还提供了一种计算设备700,如图7所示,包括至少一个处理器701,以及与至少一个处理器连接的存储器702,本申请实施例中不限定处理器701与存储器702之间的具体连接介质,图7中处理器701和存储器702之间通过总线703连接为例。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

其中,处理器701是计算设备的控制中心,可以利用各种接口和线路连接计算设备的各个部分,通过运行或执行存储在存储器702内的指令以及调用存储在存储器702内的数据,从而实现数据处理。可选的,处理器701可包括一个或多个处理单元,处理器701可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理下发指令。可以理解的是,上述调制解调处理器也可以不集成到处理器701中。在一些实施例中,处理器701和存储器702可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。

处理器701可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合批量任务处理方法实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

存储器702作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器702可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器702是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器702还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。

在本申请实施例中,存储器702存储有计算机程序,当该程序被处理器701执行时,使得处理器701执行:

基于批量任务中各任务在第一时段内的第一历史平均运行时长,以及预设队列的数量,将所述任务分配至各个所述预设队列中;

针对任一预设队列,根据所述预设队列中各任务在第一时段内的历史平均起始运行时间以及第一历史平均运行时长,确定所述预设队列中各任务的目标起始运行时间,并基于所述目标起始运行时间,运行对应任务。

可选地,处理器701具体执行:

将所述批量任务中各任务按照所述第一历史平均运行时长从短到长进行排序;

基于排序结果,多批次从所述批量任务中选择预设队列的数量的任务,分配至各个所述预设队列中;

若任一预设队列中所有任务的第一历史平均运行时长之和与目标运行时长的比例超过预设比例,则不再将任务分配至所述预设队列中;所述目标运行时长为根据所述批量任务中所有任务的第一历史平均运行时长总和以及所述预设队列的数量确定的。

可选地,处理器701具体执行:

选择在中位值之前,且与所述中位值相邻的预设队列的数量的第一历史平均运行时长对应的任务,依次分配至各个所述预设队列中;其中,所述中位值为所述批量任务的第一历史平均运行时长中的中位值;

选择在所述中位值之后,且与中位值相邻的预设队列的数量的第一历史平均运行时长对应的任务,依次分配至各个所述预设队列中。

可选地,处理器701具体执行:

若所述预设队列中有目标任务,则将所述预设队列中目标任务按照被依赖的次数从多到少进行排序,其中,任一目标任务为执行其他任务所依赖的任务;将所述预设队列中除所述目标任务之外的任务排在所述目标任务之后,且将除所述目标任务之外的任务按照历史平均起始运行时间从前到后进行排序;或者

若所述预设队列中没有目标任务,则将所述预设队列中各任务按照历史平均起始运行时间从前到后进行排序;

根据所述预设队列中前一任务的目标起始运行时间以及第一历史平均运行时长,确定下一任务的目标起始运行时间,其中所述预设队列中第一个任务的目标起始运行时间是对应的历史平均起始运行时间,或者预设的起始运行时间。

可选地,处理器701在基于所述目标起始运行时间,运行对应任务之前,还执行:

将单线程执行的任务的第一历史平均运行时长,以及在第二时段内的第二历史平均运行时长进行比对,所述第二时段为所述第一时段之前的时段;

若所述第一历史平均运行时长相比于所述第二历史运行时长的增幅大于预设增幅,则将所述单线程执行的任务切换为多线程执行。

可选地,处理器701还执行:

响应重跑指令,基于所述重跑指令对应的预设表征机构的信息,执行所述重跑指令对应的任务。

可选地,处理器701具体执行:

针对任一任务,若所述任务对应有依赖信息,则在所述任务的目标起始运行时间达到后,基于预设的对应关系确定所述任务对应的目标依赖规则;其中所述对应关系包括预设的依赖信息与依赖规则的关联;

针对任一预设表征机构的信息,根据所述目标依赖规则,确定是否基于所述预设表征机构的信息执行完成对应的目标任务,其中,所述对应的目标任务为执行所述任务所依赖的任务;

在确定基于所述预设表征机构的信息执行完成对应的目标任务后,根据所述任务的计算信息,对所述预设表征机构的信息对应的待处理数据进行处理。

由于该计算设备即是本申请实施例中的方法中的计算设备,并且该计算设备解决问题的原理与该方法相似,因此该计算设备的实施可以参见方法的实施,重复之处不再赘述。

基于相同的技术构思,本申请实施例还提供了一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述批量任务处理方法的步骤。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

相关技术
  • 一种批量任务处理方法及装置
  • 一种批量任务处理方法、装置、系统及存储介质
技术分类

06120113284276