并行处理是多个进程的分工。现代计算机具有多个 CPU 内核,在这些内核之间分散工作可以充分利用可用的计算能力。
FME 中的并行处理意味着 FME 引擎将其工作划分为多个工作进程。工作区作者决定何时使用并行处理以及应创建多少个进程。然后,操作系统决定如何将资源分配给这些进程。
并行处理在两种特定方案中最有效。
第一种情况是少量的组,每个组都有大量的处理工作要做。在存在大量小组的情况下,并行处理效率较低。例如,当您可以将数据拆分为大型夹点时,就像县或州/省中的所有数据一样。
话虽如此,第二种情况是大量小任务被转移到其他地方。例如,当功能被传递到 Web 服务 HTTPFetcher 转换器时,最有效的方法是让 FME 尽可能快地触发尽可能多的请求,同时通过许多小的并行请求命中 Web 服务。
FME中的并行处理适用于自定义转换器(在FME 2019之后,它现在是查找并行处理选项的唯一位置)。实质上,通过自定义转换器的每组功能都在单独的进程中执行此操作。数据在退出自定义转换器时合并回单个组。
由于自定义转换器被视为处理任务的单元,因此它包含的各个转换器都包含在每个并行进程中。这允许作者设置多个转换器,以便在单个设置中并行处理。它还最大限度地减少了所需进程的数量,因此启动和停止进程以及来回传递数据的开销更少。
并行处理由组定义,但某些单独的转换器是基于特征的,而不是基于组的,因此不适合并行处理。但是,自定义转换器充当基于组的包装器,为并行处理基于特征的转换器提供了一种方法。
FME 中的每个并行进程都使用自己的数据组,其中组由属性定义。首先,必须在自定义转换器定义的“导航器”窗口中选择并行处理级别:

之后,使用转换器的参数对话框选择要分组依据的属性:

此处,用户使用 ZoneCategory 属性进行并行处理以定义组。
请按照以下步骤操作,作为如何在自定义转换器上使用并行处理的示例。
1. 启动 FME 工作台并打开附加的工作空间模板:

工作空间正在读取一组公园(空间)数据。它使用邻域名称作为分组依据参数计算每个公园(面积计算器和统计计算器)的平均大小。这将创建每个社区的平均公园大小。
然后,工作空间将相邻公园面融合在一起,稍微缓冲它们以确保相邻公园合并。第二个缓冲器将公园大小缩小。
在这里可以并行处理,其中每个邻域都作为单独的过程进行处理。这是有效的,因为所有基于组的转换器(统计计算器和溶解器)都使用相同的组。
其他转换器是基于特征的,因此分组并不重要。
2. 选择画布上的所有五个转换器(不包括任何检查器转换器)。按 Ctrl+T(或从菜单栏中选择“转换器>创建自定义转换器”)。
出现提示时,输入一个简单的名称,如ParkProcessor...

然后单击“确定”关闭对话框并创建自定义转换器。
3. 在自定义转换器定义中(活动选项卡应标记为 ParkProcessor)中,浏览导航器窗口以查找并行处理参数。它位于“转换器参数”下。
双击该参数并选择“中等”作为处理级别:

单击“确定”,并行处理将处于打开状态。
4. 返回主画布(活动选项卡为主画布)。单击齿轮按钮以打开 ParkProcessor 转换器的参数对话框。在分组依据参数中选择邻域名称作为并行处理依据的属性:

现在,在运行时,自定义转换器将为每个邻域创建一个单独的进程。多个进程将并行运行(使用中等处理,每个 CPU 内核一个)。
请注意,在工作区和上面的屏幕截图中,已经有一个邻里名称的参数。
回想一下,FME 会自动发布自定义转换器中使用的所有属性。这允许转换器在多个位置使用,其中(在此示例中)“邻域名称”可能不可用。因此,FME 在创建自定义转换器时自动生成了这些已发布参数中的第一个参数,并在激活并行处理时自动生成了第二个参数。
这取决于使用NeighborhoodName的位置。可以删除 Group-By 参数中对它的任何引用,因为整个自定义转换器现在是一个大型分组依据。
因此,让我们清除这些引用。返回到自定义转换器定义。
打开统计计算器参数对话框,并通过取消选择邻域名称来取消设置分组依据。对溶解器转换器重复该过程:

检查“区域计算器”和“缓冲器”转换器中邻域名称属性的其他用法。由于没有用途,我们可以删除提示输入此属性的用户参数。为此,请打开输入端口的参数对话框,然后取消选中邻域名称:

这告诉 FME 转换器中不再需要该属性(并行处理除外),并且可以删除用户参数提示符。
6. 检查自定义转换器的参数对话框。运行工作区。输出将与以前相同,但是 - 使用并行进程 - 可能会运行得更快。
最后一个兴趣点:尽管基于特征的转换器没有要并行处理的组,但它们仍然是并行处理的。这是提高性能的另一种方式。
并行处理和特征缓存
最后一点:启用功能缓存时,并行处理处于禁用状态。这将帮助您调试自定义转换器方法,但不会启动 fme.exe子进程。