用于TPLDataflow的控制方法和装置与流程

文档序号:11154306阅读:958来源:国知局
用于TPL Dataflow 的控制方法和装置与制造工艺

本申请涉及计算机领域,具体而言,涉及一种用于TPL Dataflow的控制方法和装置。



背景技术:

TPL Dataflow是微软提供的进行流式处理的框架,适合需要高并发、高性能的应用程序。TPL Dataflow中最基础的组件是Block(块),相当于一个处理单元,每个Block定义了如何进行数据处理的逻辑。将多个Block链接起来,就组成了系统处理管道,只需要在管道开始处输入数据,接下来整个管道自动开始运行,从一个Block开始执行自己的处理逻辑,处理完成后将得到的数据投递到下一个或多个Block,最终完成整个管道的处理。

参见图1,分词程序处理管道的输入是多个文件,首先由文件读取Block读取文件,然后将读取到的文件内容投递到下一个Block(即,分行Block);分行Block将文件分为多行,然后将每一行投递到下一个Block(即,分词Block);分词Block将每一行文本分为多个单词,然后将每个单词投递到下一个Block(即,单词计数Block);单词计数Block对单词进行计数并保存。

在利用根据TPL Dataflow建立的分词程序处理管道进行数据处理时,由于单词计数Block依赖于多个分词Block,在TPL Dataflow的处理过程中,一旦有一个分词Block完成,单词计数Block就完成了,从而导致分词程序的处理结果不准确,这显然不是用户期望的,因为另外一个分词Block还没有完成。此外,现有技术中的TPL Dataflow不支持动态添加Block,比如动态添加一个分词Block。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本申请实施例提供了一种用于TPL Dataflow的控制方法和装置,以至少解决现有技术中利用TPL Dataflow的应用程序的处理结果不准确的技术问题。

根据本申请实施例的一个方面,提供了一种用于TPL Dataflow的控制方法,包括: 注册处理管道中目标块Block的上游节点列表,其中,所述处理管道由TPL Dataflow类库中的多个Block构成;添加上游节点至所述上游节点列表,其中,所述上游节点用于表征目标Block的上一级Block,所述上一级Block为所述处理管道中与所述目标Block相邻,且早于所述目标Block执行操作的Block;以及根据所述上游节点列表中全部所述上游节点对应的上一级Block的运行状态确定所述目标Block的运行状态,其中,所述目标Block的运行状态包括以下之一:完成、取消和失败。

进一步地,根据所述上游节点列表中全部所述上游节点对应的上一级Block的运行状态确定所述目标Block的运行状态包括以下任一种:当所述上游节点列表中全部所述上游节点对应的上一级Block的运行状态均为完成时,则所述目标Block的运行状态为完成;当所述上游节点列表中全部所述上游节点中有任一所述上游节点对应的上一级Block的运行状态为失败时,则所述目标Block的运行状态为失败;当所述上游节点列表中全部所述上游节点中有任一所述上游节点对应的上一级Block的运行状态为取消时,则所述目标Block的运行状态为取消。

进一步地,添加上游节点至所述上游节点列表包括:获取所述目标Block在所述处理管道中的上一级Block;将表征所述上一级Block的上游节点添加至所述上游节点列表。

进一步地,根据所述上游节点列表中全部所述上游节点对应的上一级Block的运行状态确定所述目标Block的运行状态包括:获取上游节点列表快照,并根据所述上游节点列表快照中全部的存储地址对应的上一级Block的运行状态确定所述目标Block的运行状态,其中,所述上游节点列表快照用于存储目标上游节点对应的上一级Block的存储地址,所述目标上游节点为已经添加至所述上游节点列表中的上游节点。

进一步地,获取上游节点列表快照,并根据所述上游节点列表快照中存储的全部所述存储地址对应的上一级Block的运行状态确定所述目标Block的运行状态包括:获取所述目标Block的第一上游节点列表快照;判断所述第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成;在判断出所述第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态均为完成的情况下,获取所述目标Block的第二上游节点列表快照;判断所述第二上游节点列表快照与所述第一上游节点列表快照是否相同;在判断出所述第二上游节点列表快照和所述第一上游节点列表快照相同的情况下,确定所述目标Block的运行状态为完成。

进一步地,所述方法还包括:在判断出所述第一上游节点列表快照中任一所述存储地址对应上一级Block的运行状态为失败后,确定所述目标Block的运行状态为失 败;或者在判断出所述第一上游节点列表快照中任一所述存储地址对应上一级Block的运行状态为取消后,确定所述目标Block的运行状态为取消。

进一步地,判断所述第二上游节点列表快照与所述第一上游节点列表快照是否相同包括:判断所述第二上游节点列表快照中全部的存储地址和所述第一上游节点列表快照中全部的存储地址是否完全匹配,其中,在判断出所述第二上游节点列表快照中全部的存储地址和所述第一上游节点列表快照中全部的存储地址完全匹配的情况下,确定所述第二上游节点列表快照与所述第一上游节点列表快照相同,在判断出所述第二上游节点列表快照中全部的存储地址和所述第一上游节点列表快照中全部的存储地址不完全匹配的情况下的情况下,确定所述第二上游节点列表快照与所述第一上游节点列表快照不相同。

进一步地,所述方法还包括:在判断出所述第二上游节点列表快照与所述第一上游节点列表快照不相同的情况下,获取所述目标Block的第三上游节点列表快照;判断所述第三上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成;在判断第三上游节点列表快照中每个存储地址对应的上一级Block的运行状态均为完成的情况下,获取所述目标Block的第四上游节点列表快照;判断所述第四上游节点列表快照与所述第三上游节点列表快照是否相同;在判断出所述第四上游节点列表快照和所述第三上游节点列表快照相同的情况下,确定所述目标Block的运行状态为完成。

根据本申请实施例的另一方面,还提供了一种用于TPL Dataflow的控制装置,包括:注册单元,用于注册处理管道中目标块Block的上游节点列表,其中,所述处理管道由TPL Dataflow类库中的多个Block构成;添加单元,用于添加上游节点至所述上游节点列表,其中,所述上游节点用于表征目标Block的上一级Block,所述上一级Block为所述处理管道中与所述目标Block相邻,且早于所述目标Block执行操作的Block;确定单元,用于根据所述上游节点列表中全部所述上游节点对应的上一级Block的运行状态确定所述目标Block的运行状态,其中,所述目标Block的运行状态包括以下之一:完成、取消和失败。

进一步地,所述确定单元包括以下之一:第一确定子单元,用于当所述上游节点列表中全部所述上游节点对应的上一级Block的运行状态均为完成时,则所述目标Block的运行状态为完成;第二确定子单元,用于当所述上游节点列表中全部所述上游节点中有任一所述上游节点对应的上一级Block的运行状态为失败时,则所述目标Block的运行状态为失败;第三确定子单元,用于当所述上游节点列表中全部所述上游节点中有任一所述上游节点对应的上一级Block的运行状态为取消时,则所述目标 Block的运行状态为取消。

进一步地,所述添加单元包括:获取子单元,用于获取所述目标Block在所述处理管道中的上一级Block;添加子单元,用于将表征所述上一级Block的上游节点添加至所述上游节点列表。

进一步地,所述确定单元包括:处理子单元,用于获取上游节点列表快照,并根据所述上游节点列表快照中全部的存储地址对应的上一级Block的运行状态确定所述目标Block的运行状态,其中,所述上游节点列表快照用于存储目标上游节点对应的上一级Block的存储地址,所述目标上游节点为已经添加至所述上游节点列表中的上游节点。

进一步地,所述处理子单元包括:第一获取模块,用于获取所述目标Block的第一上游节点列表快照;第一判断模块,用于判断所述第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成;第二获取模块,用于在判断出所述第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态均为完成的情况下,获取所述目标Block的第二上游节点列表快照;第二判断模块,用于判断所述第二上游节点列表快照与所述第一上游节点列表快照是否相同;第一确定模块,用于在判断出所述第二上游节点列表快照和所述第一上游节点列表快照相同的情况下,确定所述目标Block的运行状态为完成。

进一步地,所述装置还包括:第二确定模块,用于在判断所述第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成之后,在判断出所述第一上游节点列表快照中任一所述存储地址对应上一级Block的运行状态为失败后,确定所述目标Block的运行状态为失败;或者第三确定模块,用于在判断所述第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成之后,在判断出所述第一上游节点列表快照中任一所述存储地址对应上一级Block的运行状态为取消后,确定所述目标Block的运行状态为取消。

进一步地,所述第二判断模块包括:判断子模块,用于判断所述第二上游节点列表快照中全部的存储地址和所述第一上游节点列表快照中全部的存储地址是否完全匹配,其中,在判断出所述第二上游节点列表快照中全部的存储地址和所述第一上游节点列表快照中全部的存储地址完全匹配的情况下,确定所述第二上游节点列表快照与所述第一上游节点列表快照相同,在判断出所述第二上游节点列表快照中全部的存储地址和所述第一上游节点列表快照中全部的存储地址不完全匹配的情况下的情况下,确定所述第二上游节点列表快照与所述第一上游节点列表快照不相同。

进一步地,所述装置还包括:第三获取模块,用于在判断所述第二上游节点列表快照与所述第一上游节点列表快照是否相同之后,在判断出所述第二上游节点列表快照与所述第一上游节点列表快照不相同的情况下,获取所述目标Block的第三上游节点列表快照;第三判断模块,用于判断所述第三上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成;第四获取模块,用于在判断第三上游节点列表快照中每个存储地址对应的上一级Block的运行状态均为完成的情况下,获取所述目标Block的第四上游节点列表快照;第四判断模块,用于判断所述第四上游节点列表快照与所述第三上游节点列表快照是否相同;第四确定模块,用于在判断出所述第四上游节点列表快照和所述第三上游节点列表快照相同的情况下,确定所述目标Block的运行状态为完成。

在本申请实施例中,采用注册处理管道中目标块Block的上游节点列表,其中,所述处理管道由TPL Dataflow类库中的多个Block构成;添加上游节点至所述上游节点列表,其中,所述上游节点用于表征目标Block的上一级Block,所述上一级Block为所述处理管道中与所述目标Block相邻,且早于所述目标Block执行操作的Block;根据所述上游节点列表中全部所述上游节点对应的上一级Block的运行状态确定所述目标Block的运行状态,其中,所述目标Block的运行状态包括以下之一:完成、取消和失败的方式。通过建立目标Block的上游节点列表,进而添加上游节点至上游节点列表,其中,上游节点为表征目标Block的上一级Block的节点,最后根据添加至上游节点列表中的全部上游节点对应的上一级Block共同确定目标Block的运行状态,达到了根据与该目标Block相关的全部Block共同来确定出该目标Block的运行状态,使得该目标Block的处理结果更加准确的目的,由于目标Block的处理结果与利用TPL Dataflow的应用程序的处理结果相关联,从而实现了提高利用TPL Dataflow的应用程序的处理结果准确性的技术效果,进而解决了现有技术中利用TPL Dataflow的应用程序的处理结果不准确的技术问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是现有技术中利用TPL Dataflow的分词程序的处理管道的示意图;

图2是根据本申请实施例的一种用于TPL Dataflow的控制方法的流程图;以及

图3是根据本申请实施例的一种用于TPL Dataflow的控制装置的示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本申请实施例,提供了一种用于TPL Dataflow的控制方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图2是根据本申请实施例的一种用于TPL Dataflow的控制方法的流程图,如图2所示,该方法包括步骤S202至步骤S206,具体如下:

步骤S202,注册处理管道中目标块Block的上游节点列表,其中,处理管道由TPL Dataflow类库中的多个Block构成。

具体地,目标Block为利用TPL Dataflow的应用程序中,具有上一级Block的Block。其中,上一级Block的含义请见下文描述。以图1中所示的分词程序为例,目标Block可以为分行Block、分词Block或者单词计数Block。

步骤S204,添加上游节点至上游节点列表,其中,上游节点用于表征目标Block的上一级Block,上一级Block为处理管道中与目标Block相邻,且早于目标Block执行操作的Block。

具体地,上游节点的数量可以为一个,也可以为多个,具体根据上一级Block的数量确定。每个上游节点对应一个上一级Block,也即,上游节点与上一级Block一一对应。

参照图1,继续采用上述举例进行说明,当目标Block为分词Block时,上一级Block有一个,具体为分行Block;当目标Block为单词计数Block时,上一级Block有两个,均为分词Block。

步骤S206,根据上游节点列表中全部上游节点对应的上一级Block的运行状态确定目标Block的运行状态,其中,目标Block的运行状态包括以下之一:完成、取消和失败,也即,根据全部的上一级Block的运行状态共同确定出目标Block的运行状态。

具体地,当目标Block的运行状态为完成时,目标Block完成执行操作;当目标Block的运行状态为取消时,目标Block取消执行操作;当目标Block的运行状态为失败时,则目标Block执行操作失败。

假设目标Block为单词计数Block,当单词计数Block的运行状态为完成时,则单词计数Block完成单词计数操作;当单词计数Block的运行状态为取消时,则单词计数Block取消执行单词计数操作;当单词计数Block的运行状态为失败时,则单词计数Block执行单词计数操作失败。

例如,上游节点有5个,则根据这5个上游节点对应的5个上一级Block的运行状态共同确出目标Block的运行状态。

在本申请实施例中,通过建立目标Block的上游节点列表,进而添加上游节点至上游节点列表,其中,上游节点为表征目标Block的上一级Block的节点,最后根据添加至上游节点列表中的全部上游节点对应的上一级Block共同确定目标Block的运行状态,达到了根据与该目标Block相关的全部Block共同来确定出该目标Block的运行状态,使得该目标Block的处理结果更加准确的目的,由于目标Block的处理结果与利用TPL Dataflow的应用程序的处理结果相关联,从而实现了提高利用TPL Dataflow的应用程序的处理结果准确性的技术效果,进而解决了现有技术中利用TPL Dataflow的应用程序的处理结果不准确的技术问题。

可选地,根据上游节点列表中全部上游节点对应的上一级Block的运行状态确定目标Block的运行状态包括以下任一种情况:

情况一:当上游节点列表中全部上游节点对应的上一级Block的运行状态均为完成时,则目标Block的运行状态为完成,也即,若目标Block的每个上一级Block的运行状态都为完成时,则目标Block的运行状态为完成。

情况二:当上游节点列表中全部上游节点中有任一上游节点对应的上一级Block的运行状态为失败时,则目标Block的运行状态为失败,也即,若目标Block的上一 级Block中存在运行状态为失败的上一级Block,则目标Block的运行状态为失败。

情况三:当上游节点列表中全部上游节点中有任一上游节点对应的上一级Block的运行状态为取消时,则目标Block的运行状态为取消,也即,若目标Block的上一级Block中存在运行状态为取消的上一级Block,则目标Block的运行状态为取消。

可选地,在本申请实施例中,添加上游节点至上游节点列表包括步骤S1至步骤S3,具体如下:

步骤S1,获取目标Block在处理管道中的上一级Block。

步骤S3,将表征上一级Block的上游节点添加至上游节点列表。

在本申请实施例中,可以是获取一个目标Block的上一级Block,就添加一个表征上一级Block的上游节点至上游节点列表,也可以是获取到目标Block的全部上一级Block后,逐个添加表征上一级Block的上游节点至上游节点列表。

可选地,根据上游节点列表中全部上游节点对应的上一级Block的运行状态确定目标Block的运行状态包括步骤S5,具体如下:

步骤S5,获取上游节点列表快照,并根据上游节点列表快照中全部的存储地址对应的上一级Block的运行状态确定目标Block的运行状态,其中,上游节点列表快照用于存储目标上游节点对应的上一级Block的存储地址,目标上游节点为已经添加至上游节点列表中的上游节点,本步骤也即,根据全部目标上游节点对应的上一级Block的运行状态共同确定出目标Block的运行状态。

具体地,在注册第一个上游节点至上游节点列表后,就开始获取上游节点列表快照。上游节点列表快照中存储有目标上游节点对应的上一级Block在本地机器上的存储地址,根据该存储地址可以找到上述上一级Block的相关文件,进而可以根据上述相关文件的文本内容得到该上一级Block的运行状态。

可选地,步骤S5获取上游节点列表快照,并根据上游节点列表快照中存储的全部存储地址对应的上一级Block的运行状态确定目标Block的运行状态包括步骤S51至步骤S59,具体如下:

步骤S51,获取目标Block的第一上游节点列表快照。

一般情况下,在添加第一个上游节点至上游节点列表后,就获取目标Block的第一上游节点列表快照,所以第一上游节点列表快照中至少包含一个上游节点对应的上一级Block的存储地址。

步骤S53,判断第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成。

步骤S55,在判断出第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态均为完成的情况下,获取目标Block的第二上游节点列表快照。其中,第二上游节点列表快照的获取时间晚于第一上游节点列表快照的获取时间。

步骤S57,判断第二上游节点列表快照与第一上游节点列表快照是否相同。

步骤S59,在判断出第二上游节点列表快照和第一上游节点列表快照相同的情况下,确定目标Block的运行状态为完成。

考虑到存在上游节点较多的情况,由于上游节点是逐个添加到上游节点列表中的,并且在添加第一个上游节点至上游节点列表后,就开始获取第一列表快照,则在获取第一上游节点列表快照的过程中,仍会添加其它上游节点至上游节点列表,也即,获取上游节点列表快照和添加上游节点至上游节点列表是并列进行的,这样的话,在较早获取到的第一上游节点列表快照中,可能只包含部分已经添加到上游节点列表中上游节点对应的上一级Block的存储地址,但获取第一上游节点列表快照后才添加至上游节点列表中的上游节点对应的上一级Block的存储地址则不在上述第一上游节点列表快照中,进而为了避免第一上游节点列表快照中存储地址数据不全,无法准确的根据其内的存储地址对应的上一级Block的运行状态确定出目标Block的运行状态的情况,还需再次获取上游节点列表快照(也即,第二上游节点列表快照),并比较两次上游节点列表快照是否相同,在相同的情况下,可以直接得出目标Block的运行状态,在不相同的情况下,再获取新的上游节点列表快照,并根据新的上游节点列表快照中的存储地址确定目标Block的运行状态。

需要说明的是,上述内容中获取第一上游节点列表快照后才添加至上游节点列表中的上游节点对应的上一级Block可能是用户在处理管道中新添加关于目标Block的上一级Block(也即,用户在处理管道中动态添加的新的上一级Block),也可能是关于目标Block在处理管道中原本就存在的上一级Block。

通过上述内容可知,本申请实施例支持用户在利用TPL Dataflow类库创建的处理管道中,根据其需求动态添加新的Block,与现有技术中不支持用户动态添加新的Block相比,达到了提高用户满意度的效果。

可选地,在本申请实施例中,用于TPL Dataflow的控制方法还包括步骤S511或者步骤S513,具体如下:

步骤S511,在判断出第一上游节点列表快照中任一存储地址对应上一级Block的 运行状态为失败后,确定目标Block的运行状态为失败。

步骤S513,在判断出第一上游节点列表快照中任一存储地址对应上一级Block的运行状态为取消后,确定目标Block的运行状态为取消。

具体地,如果判断出第一上游节点列表快照中有一个存储地址对应的上一级Block的运行状态为失败,则目标Block的运行状态为失败,同样的,如果判断出第一上游节点列表快照中有一个存储地址对应的上一级Block的运行状态为取消,则目标Block的运行状态为取消,并且后续不会再获取其它的上游节点列表快照。

可选地,步骤S57中判断第二上游节点列表快照与第一上游节点列表快照是否相同包括:判断第二上游节点列表快照中全部的存储地址和第一上游节点列表快照中全部的存储地址是否完全匹配,其中,在判断出第二上游节点列表快照中全部的存储地址和第一上游节点列表快照中全部的存储地址完全匹配的情况下,确定第二上游节点列表快照与第一上游节点列表快照相同,在判断出第二上游节点列表快照中全部的存储地址和第一上游节点列表快照中全部的存储地址不完全匹配的情况下的情况下,确定第二上游节点列表快照与第一上游节点列表快照不相同。

其中,上述是否完全匹配包括两方面:一方面是第二上游节点列表快照中全部的存储地址的数量与第一上游节点列表快照中全部的存储地址的数量是否相同;另一方面是第二上游节点列表快照中每个存储地址是否与第一上游节点列表快照中每个存储地址的存储路径是否相同。若上述两方面都满足,则说明第二上游节点列表快照与第一上游节点列表快照相同;若只满足一个方面或者一个方面都未满足,则说明第二上游节点列表快照与第一上游节点列表快照不相同。需要说明的是,若第二上游节点列表快照中全部存储地址与第一上游节点列表快照中全部存储地址所存储的存储路径中有部分不同或者完全不同,则确定未满足该方面要求,换而言之,只要第二上游节点列表快照中的存储地址与第一上游节点列表快照中的存储地址存在差异,则认为第二上游节点列表快照与第一上游节点列表快照不同。

可选地,在本申请实施例中,用于TPL Dataflow的控制方法还包括步骤S515至步骤S523:

步骤S515,在判断出第二上游节点列表快照与第一上游节点列表快照不相同的情况下,获取目标Block的第三上游节点列表快照。

其中,第三上游节点列表快照的获取时间晚于第二上游节点列表快照的获取时间。

步骤S517,判断第三上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成。

步骤S519,在判断第三上游节点列表快照中每个存储地址对应的上一级Block的运行状态均为完成的情况下,获取目标Block的第四上游节点列表快照。

其中,第四上游节点列表快照的获取时间晚于第三上游节点列表快照的获取时间。

同样的,如果判断出第三上游节点列表快照中有一个存储地址对应的上一级Block的运行状态为失败,则目标Block的运行状态为失败,同样的,如果判断出第三上游节点列表快照中有一个存储地址对应的上一级Block的运行状态为取消,则目标Block的运行状态为取消,并且后续不会再获取其它的上游节点列表快照(例如,第四上游节点列表快照)。

步骤S521,判断第四上游节点列表快照与第三上游节点列表快照是否相同。

具体地,判断第四上游节点列表快照与第三上游节点列表快照是否相同的过程与判断第二上游节点列表快照与第一上游节点列表快照是否相同的过程相同,具体请参照上述实施例中对判断第二上游节点列表快照与第一上游节点列表快照是否相同的说明,在此不再赘述。

步骤S523,在判断出第四上游节点列表快照和第三上游节点列表快照相同的情况下,确定目标Block的运行状态为完成。

需要说明的是,如果第四上游节点列表快照与第三上游节点列表快照不同,则需要继续获取第五上游节点列表快照,甚至第六上游节点列表快照,第五上游节点列表快照和第六上游节点列表快照的获取条件以及获取第五上游节点列表快照和第六上游节点列表快照后的处理过程可以参照上述步骤S515至步骤S523,在此不再重复说明,直至确定出目标Block的运行状态。

为了能够更好的理解本申请实施例所提供的用于TPL Dataflow的控制方法,参照图1,下面以目标Block为单词计数Block为例,进行举例说明。

参照图1,需要利用TPL Dataflow创建分词程序的处理管道,在该处理管道中包括两个分词Block和一个单词计数Block。另,为了方便说明,将两个分词Block分别命名为分词Block1和分词Block2,至于上述两个分词Block中哪个分词Block为分词Block1,哪个是分词Block为分词Block2,不做限定。

根据上述内容可知,单词计数Block的上一级Block有两个,分别为分词Block1和分词Block2。

具体过程如下:首先,注册一个单词计数Block的上游节点列表;其次,添加分词Block1对应的上游节点至上游节点列表;然后,在添加分词Block1对应的上游节 点至上游节点列表后,获取上游节点列表快照,记为快照1,此时快照1只包含分词Block1的存储地址。假设分词Block1先执行完分词操作,此时单词计数Block也准备执行单词计数操作。但是在单词计数Block准备执行单词计数操作前,再次获取上游节点列表快照,记为快照2,此时,快照2包含分词Block1的存储地址和分词Block2的存储地址,由于快照1只包含分词Block1的存储地址,因此,确定快照2和快照1不一样。则再次获取上游节点快照,记为快照3,快照3中也包含分词Block1的存储地址和分词Block2的存储地址,但是分词Block1已完成分词操作,分词Block2未完成分词操作,因此单词计数Block也未完成单词计数操作。此时,假设此时用户动态注册了一个分词Block,记为分词Block3,则单词计数Block又多了一个上一级Block。当分词Block2也完成分词操作时,则快照3中全部的存储地址对应上一级Block都已执行完分词操作,单词计数Block再次准备执行单词计数操作。在单词计数Block准备执行单词计数操作前,再次获取上游节点列表快照,记为快照4,此时,快照4包含分词Block1的存储地址、分词Block2的存储地址和分词Block3的存储地址,因为快照3中包含的是Block1的存储地址和Block2的存储地址,因此快照4和快照3仍不一样。则再次获取上游节点列表快照,记为快照5,假设此后用户不再注册新的分词Block,当分词Block3执行完分词操作时,再次获取上游节点列表快照,记为快照6,此时快照5和快照6都包含分词Block1的存储地址、分词Block2的存储地址和分词Block3的存储地址,则说明快照5和快照6相同,那么单词计数Block也就可以执行单词计数操作了,也即单词计数Block的运行状态为完成。

通过上述内容可知,应用本申请实施例所提供的用于TPL Dataflow的控制方法,应用程序处理管道中的目标Block不仅能够自动、准确的得出操作结果,还支持用户动态添加Block。

根据本申请实施例,还提供了一种用于TPL Dataflow的控制装置,该用于TPL Dataflow的控制装置用于执行本申请实施例上述内容所提供的用于TPL Dataflow的控制方法,以下对本申请实施例所提供的用于TPL Dataflow的控制装置做具体介绍:

图3是根据本申请实施例的一种用于TPL Dataflow的控制装置的示意图,如图3所示,该控制装置主要包括注册单元31、添加单元33和确定单元35,其中:

注册单元31用于注册处理管道中目标块Block的上游节点列表,其中,处理管道由TPL Dataflow类库中的多个Block构成。

具体地,目标Block为利用TPL Dataflow的应用程序中,具有上一级Block的Block。其中,上一级Block的含义请见下文描述。以图1中所示的分词程序处理管道为例,目标Block可以为分行Block、分词Block或者单词计数Block。

添加单元33用于添加上游节点至上游节点列表,其中,上游节点用于表征目标Block的上一级Block,上一级Block为处理管道中与目标Block相邻,且早于目标Block执行操作的Block。

具体地,上游节点的数量可以为一个,也可以为多个,具体根据上一级Block的数量确定。每个上游节点对应一个上一级Block,也即,上游节点与上一级Block一一对应。

确定单元35用于根据上游节点列表中全部上游节点对应的上一级Block的运行状态确定目标Block的运行状态,其中,目标Block的运行状态包括以下之一:完成、取消和失败,也即,根据全部的上一级Block的运行状态共同确定出目标Block的运行状态。

在本申请实施例中,通过建立目标Block的上游节点列表,进而添加上游节点至上游节点列表,其中,上游节点为表征目标Block的上一级Block的节点,最后根据添加至上游节点列表中的全部上游节点对应的上一级Block共同确定目标Block的运行状态,达到了根据与该目标Block相关的全部Block共同来确定出该目标Block的运行状态,使得该目标Block的处理结果更加准确的目的,由于目标Block的处理结果与利用TPL Dataflow的应用程序的处理结果相关联,从而实现了提高利用TPL Dataflow的应用程序的处理结果准确性的技术效果,进而解决了现有技术中利用TPL Dataflow的应用程序的处理结果不准确的技术问题。

可选地,在本申请实施例中,确定单元35包括第一确定子单元、第二确定子单元和第三确定子单元中的任一子单元。其中,第一确定子单元用于当上游节点列表中全部上游节点对应的上一级Block的运行状态均为完成时,则目标Block的运行状态为完成;第二确定子单元用于当上游节点列表中全部上游节点中有任一上游节点对应的上一级Block的运行状态为失败时,则目标Block的运行状态为失败;第三确定子单元用于当上游节点列表中全部上游节点中有任一上游节点对应的上一级Block的运行状态为取消时,则目标Block的运行状态为取消。

可选地,在本申请实施例中,添加单元33包括获取子单元和添加子单元。其中,获取子单元用于获取目标Block在处理管道中的上一级Block;添加子单元用于将表征上一级Block的上游节点添加至上游节点列表。

可选地,在本申请实施例中,确定单元35包括处理子单元。其中,处理子单元用于获取上游节点列表快照,并根据上游节点列表快照中全部的存储地址对应的上一级Block的运行状态确定目标Block的运行状态,其中,上游节点列表快照用于存储目 标上游节点对应的上一级Block的存储地址,目标上游节点为已经添加至上游节点列表中的上游节点,处理子单元也即用于根据全部目标上游节点对应的上一级Block的运行状态共同确定出目标Block的运行状态。

可选地,处理子单元包括第一获取模块、第一判断模块、第二获取模块、第二判断模块和第一确定模块,其中:

第一获取模块用于获取目标Block的第一上游节点列表快照。

第一判断模块用于判断第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成。

第二获取模块用于在判断出第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态均为完成的情况下,获取目标Block的第二上游节点列表快照。其中,第二上游节点列表快照的获取时间晚于第一上游节点列表快照的获取时间。

第二判断模块用于判断第二上游节点列表快照与第一上游节点列表快照是否相同。

第一确定模块用于在判断出第二上游节点列表快照和第一上游节点列表快照相同的情况下,确定目标Block的运行状态为完成。

通过上述内容可知,本申请实施例支持用户在利用TPL Dataflow类库创建的处理管道中,根据其需求动态添加新的Block,与现有技术中不支持用户动态添加新的Block相比,达到了提高用户满意度的效果。

进一步可选地,在本申请实施例中,装置还包括第二确定模块或者第三确定模块。其中,第二确定模块用于在判断第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成之后,在判断出第一上游节点列表快照中任一存储地址对应上一级Block的运行状态为失败后,确定目标Block的运行状态为失败;第三确定模块用于在判断第一上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成之后,在判断出第一上游节点列表快照中任一存储地址对应上一级Block的运行状态为取消后,确定目标Block的运行状态为取消。

可选地,在本申请实施例中,第二判断模块包括:判断子模块,用于判断第二上游节点列表快照中全部的存储地址和第一上游节点列表快照中全部的存储地址是否完全匹配,其中,在判断出第二上游节点列表快照中全部的存储地址和第一上游节点列表快照中全部的存储地址完全匹配的情况下,确定第二上游节点列表快照与第一上游节点列表快照相同,在判断出第二上游节点列表快照中全部的存储地址和第一上游节点列表快照中全部的存储地址不完全匹配的情况下的情况下,确定第二上游节点列表 快照与第一上游节点列表快照不相同。

可选地,在本申请实施例中,装置还包括第三获取模块、第三判断模块、第四获取模块、第四判断模块和第四确定模块,其中:

第三获取模块用于在判断第二上游节点列表快照与第一上游节点列表快照是否相同之后,在判断出第二上游节点列表快照与第一上游节点列表快照不相同的情况下,获取目标Block的第三上游节点列表快照。

第三判断模块用于判断第三上游节点列表快照中每个存储地址对应的上一级Block的运行状态是否均为完成。

第四获取模块用于在判断第三上游节点列表快照中每个存储地址对应的上一级Block的运行状态均为完成的情况下,获取目标Block的第四上游节点列表快照。

同样的,如果判断出第三上游节点列表快照中有一个存储地址对应的上一级Block的运行状态为失败,则目标Block的运行状态为失败,同样的,如果判断出第三上游节点列表快照中有一个存储地址对应的上一级Block的运行状态为取消,则目标Block的运行状态为取消,并且后续不会再获取其它的上游节点列表快照。

第四判断模块用于判断第四上游节点列表快照与第三上游节点列表快照是否相同。

第四确定模块用于在判断出第四上游节点列表快照和第三上游节点列表快照相同的情况下,确定目标Block的运行状态为完成。

需要说明的是,如果第四上游节点列表快照与第三上游节点列表快照不同,则需要继续获取第五上游节点列表快照,甚至第六上游节点列表快照,第五上游节点列表快照和第六上游节点列表快照的获取条件以及获取第五上游节点列表快照和第六上游节点列表快照后的处理过程可以参照上述第三获取模块、第三判断模块、第四获取模块、第四判断模块以及第四确定模块,在此不再重复说明,直至确定出目标Block的运行状态。

所述用于TPL Dataflow的控制装置包括处理器和存储器,上述注册单元、添加单元和确定单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元。

处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数实现了提高利用TPL Dataflow的应用程序的处理结果准确性,进而解决了现有技术中利用TPL Dataflow的应用程序的处理结果不准确的技术问题。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。

本申请还提供了一种计算机程序产品的实施例,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:注册处理管道中目标块Block的上游节点列表,其中,处理管道由TPL Dataflow类库中的多个Block构成;添加上游节点至上游节点列表,其中,上游节点用于表征目标Block的上一级Block,上一级Block为处理管道中与目标Block相邻,且早于目标Block执行操作的Block;根据上游节点列表中全部上游节点对应的上一级Block的运行状态确定目标Block的运行状态,其中,目标Block的运行状态包括以下之一:完成、取消和失败。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所 述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1