Python 使用perfict拆分任务

Python 使用perfict拆分任务,python,prefect,Python,Prefect,我需要创建可以使用此工作流处理任务的批处理: | task 4 | task 3 ->| task 4 | task 2 -> | task 4

我需要创建可以使用此工作流处理任务的批处理:

                                             | task 4
                                  | task 3 ->| task 4
                       | task 2 ->           | task 4
                           
                                  | task 3 ->| task 4
    input ->  task 1 ->
                       | task 2 -> ... 
  • 任务#1处理输入数据并返回列表列表
  • 任务2从任务1接收列表,并返回列表列表
  • 任务3从任务2接收列表,并返回列表列表
  • 任务4从任务4接收列表并处理列表中的数据
例如,task#1返回
[]、[]、[]、[]、[]]
。这意味着流必须并行运行4个任务2。每个任务#2返回
[]、[]、[]]
。现在我们必须有4x3任务#3。然后任务#3返回
[],[]
。最后,流程必须运行4x3x2任务#4

是否可以使用完美的流程?我尝试使用映射功能,但它似乎不支持如此复杂的工作流模式(或者我没有正确地使用它)

当我运行流task1时,返回正确数量的列表。然后flow创建4个task2,每个task2返回三个列表的列表。但是流没有创建12个task3,而是只创建了其中的4个。 每个task3接收由4个列表组成的列表,因为它是使用task1创建的,而不是task2中的1个列表


关于如何创建这样的工作流,您有什么想法吗?

可能与您的问题有关。引用链接中的dev@cicdw,“perfict试图避免假设用户意图,因此只映射您提供的iterable而不更改其内容”。我不使用Prefict,所以除了自己尝试之外,我无法提供更多信息。你看过使用
flatten
?我不能肯定,但这似乎是你要找的:@chriswhite非常感谢,这正是我需要的。它现在可以与Flatte一起工作。
with Flow('test') as flow:
   res1 = task1()
   res2 = task2.map(res1)
   res3 = task3.map(res2)
   res4 = task4.map(res3)