Sta*_*ace 9 parallel-processing powershell workflow powershell-3.0
我正在从模板克隆ESX服务器上的VM.简化代码如下所示:
Workflow Create-VM {
$List = 1..500
foreach -parallel ($Elem in $List)
{
# Create VM ...
# Configure created VM ..
}
}
Create-VM
Run Code Online (Sandbox Code Playgroud)
并行执行非常有用.不幸的是,在这种情况下不能很好地工作.生成了太多并行请求.我需要将并行执行次数限制为较小的数字(例如4).
我试图更改本地会话配置(SessionThrottleLimit,MaxSessionsPerWorkflow,MaxRunningWorkflows)http://technet.microsoft.com/en-us/library/hh849862.aspx.
$WWE = New-PSWorkflowExecutionOption -SessionThrottleLimit 4
Set-PSSessionConfiguration -Name microsoft.powershell.workflow `
-SessionTypeOption $WWE
Get-PSSessionConfiguration microsoft.powershell.workflow |
fl SessionThrottleLimit
Run Code Online (Sandbox Code Playgroud)
题
jbo*_*112 14
可以使用选项来限制foreach-parallel循环中的并行进程数-throttlelimit N.它非常适合降低并行度,但如果您尝试使用高数字,系统可能仍会将您限制为5,具体取决于您的所有软件版本(YAY!Microsoft一致性).我知道这个问题已经过时了,但是因为它没有得到合适的答案而出现在Google上,我以为我会参与其中.
Workflow Create-VM {
$List = 1..500
foreach -parallel -throttlelimit 4 ($Elem in $List)
{
# Create VM ...
# Configure created VM ..
}
}
Create-VM
Run Code Online (Sandbox Code Playgroud)
一个简单的解决方案是将列表分成更小的块,并将其用作并行 foreach 的输入。就像这样,
Workflow Create-VM {
$List = 1..500
# Calclulate indexes to get elements 0,3; 4,7; 8,11 and so on
# Use the .. operator to extract those elements from $list and pass
# 'em to foreach -parallel processing part
for($i=0;$i -le $List.Count-4; $i+=4) {
foreach -parallel ($Elem in $list[$i..($i+3)]) {
# Create VM ...
# Configure created VM ..
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10520 次 |
| 最近记录: |