将两个工作流嵌套在一个工作流中以 运行 并行
Nest two workflows in a single workflow to run parallel
我确定我不是第一个尝试此操作的人,但找不到一个 post 关于它。
我正在尝试将两个工作流嵌套在一个工作流中,以便这两个工作流并行运行,我得到 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 个流程?
为伪代码道歉,但实际代码包含我无法分享的信息。
我设法弄清楚了,并弄清楚了 USING 作用域的使用位置。
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 循环。这完全消除了我对示波器的需求。我必须将嵌套工作流中传递的 a/b 列表变量设置为具有 USING 范围的内联脚本。
我确定我不是第一个尝试此操作的人,但找不到一个 post 关于它。
我正在尝试将两个工作流嵌套在一个工作流中,以便这两个工作流并行运行,我得到 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 个流程?
为伪代码道歉,但实际代码包含我无法分享的信息。
我设法弄清楚了,并弄清楚了 USING 作用域的使用位置。
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 循环。这完全消除了我对示波器的需求。我必须将嵌套工作流中传递的 a/b 列表变量设置为具有 USING 范围的内联脚本。