2015-11-13 59 views
1

我確定我不是第一個嘗試此操作的人,但無法找到關於它的單個帖子。在單個工作流程中嵌套兩個工作流程以並行運行

我正在嘗試在單個工作流程中嵌套兩個工作流程,因此這兩個工作流程並行工作,並獲得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個進程?

爲僞代碼道歉,但實際代碼包含我無法共享的信息。

回答

1

我設法弄明白了,並找出使用範圍的地方。

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。

相關問題