在单个工作流程中嵌套两个工作流程以并行运行

问题描述:

我确定我不是第一个尝试此操作的人,但无法找到关于它的单个帖子。在单个工作流程中嵌套两个工作流程以并行运行

我正在尝试在单个工作流程中嵌套两个工作流程,因此这两个工作流程并行工作,并获得10个进程。这是我第一次尝试:

Workflow a { 
    param(
     [parameter()]alist 
    ) 
    sequence 
    { 
     $WORKFLOW:aOutput = @() 
     foreach ($aObject in $aList) 
     { 
      $WORKFLOW:aOutput += do_stuff 
     } 
     return $WORKFLOW:aOutput 
    } 
) 
} 
Workflow b { 
    param(
     [parameter()]blist 
    ) 
    sequence 
    { 
     $WORKFLOW:bOutput = @() 
     foreach ($bObject in $bList) 
     { 
      $WORKFLOW:bOutput += do_stuff 
     } 
     return $WORKFLOW:bOutput 
    } 
) 
} 
Workflow nest 
{ 
param(
    [parameter()]alist, 
    [parameter()]blist 
) 
parallel 
{ 
    $aOutput = b -alist alist 
    $bOutput = b -blist blist 
} 
return ($aOutput,$bOutput) 
} 

这一切的伟大工程,但只有旋转起来5个并行进程而不是10所以我尝试这样的:

Workflow nest 
{ 
param(
    [parameter()]alist, 
    [parameter()]blist 
) 
parallel 
{ 
    $aOutput = inlinescript 
    { 
     Workflow a { 
     param(
      [parameter()]alist 
     ) 
     sequence 
     { 
      $WORKFLOW:aOutput = @() 
      foreach ($aObject in $aList) 
      { 
       $WORKFLOW:aOutput += do_stuff 
      } 
      return $WORKFLOW:aOutput 
     } 
    } 
    $bOutput = inlinescript 
    { 
     Workflow b { 
       param(
        [parameter()]blist 
       ) 
       sequence 
       { 
        $WORKFLOW:bOutput = @() 
        foreach ($bObject in $bList) 
        { 
         $WORKFLOW:bOutput += do_stuff 
        } 
        return $WORKFLOW:bOutput 
       } 
      ) 
     } 
     b -blist blist 
    } 
} 
return ($aOutput,$bOutput) 
} 

我有这里的问题是它抛出在内联块内使用范围WORKFLOW的错误。错误说使用范围USING代替,但是当我切换到关于重新定义foreach-parallel块内的变量时出现错误。

我在找什么是可能的,如果是的话需要使用哪些范围来嵌套工作流?还是有另一种方法让工作流同时运行5个进程?

为伪代码道歉,但实际代码包含我无法共享的信息。

我设法弄明白了,并找出使用范围的地方。

Workflow nest 
{ 
param(
    [parameter()]alist, 
    [parameter()]blist 
) 
parallel 
{ 
    $aOutput = inlinescript 
    { 
     Workflow a { 
     param(
      [parameter()]alist 
     ) 
     sequence 
     { 
      $aOutput = foreach ($aObject in $aList) 
      { 
       do_stuff 
      } 
      return aOutput 
     } 
     a -alist $USING:alist 
    } 
    $bOutput = inlinescript 
    { 
     Workflow b { 
       param(
        [parameter()]blist 
       ) 
       sequence 
       { 
        $bOutput = foreach ($bObject in $bList) 
        { 
         do_stuff 
        } 
        return $bOutput 
       } 
      ) 
     } 
     b -blist $USING:blist 
    } 
} 
return ($aOutput,$bOutput) 
} 

基本上我删除了在foreach循环中添加的数组定义,并将其设置为等于foreach循环。这完全消除了我对范围的需求。我不得不使用USING作用域将嵌套工作流中传递的a/b列表变量设置为inlinescript。