在单个工作流程中嵌套两个工作流程以并行运行
问题描述:
我确定我不是第一个尝试此操作的人,但无法找到关于它的单个帖子。在单个工作流程中嵌套两个工作流程以并行运行
我正在尝试在单个工作流程中嵌套两个工作流程,因此这两个工作流程并行工作,并获得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。