2015-05-29 62 views
3

我有一個PowerShell的工作流程,看起來像這樣,除了每個符函數的作用通常有很大的不同:PowerShell的工作流線程限制

function Foo1 
{ 
    "Foo1 : {0:hh}:{0:mm}:{0:ss}" -f (Get-Date) 
    Start-Sleep 2 
} 

function Foo2 
{ 
    "Foo2 : {0:hh}:{0:mm}:{0:ss}" -f (Get-Date) 
    Start-Sleep 2 
} 

function Foo3 
{ 
    "Foo3 : {0:hh}:{0:mm}:{0:ss}" -f (Get-Date) 
    Start-Sleep 2 
} 

function Foo4 
{ 
    "Foo4 : {0:hh}:{0:mm}:{0:ss}" -f (Get-Date) 
    Start-Sleep 2 
} 

function Foo5 
{ 
    "Foo5 : {0:hh}:{0:mm}:{0:ss}" -f (Get-Date) 
    Start-Sleep 2 
} 

function Foo6 
{ 
    "Foo6 : {0:hh}:{0:mm}:{0:ss}" -f (Get-Date) 
    Start-Sleep 2 
} 

workflow Invoke-Workflow 
{ 
    parallel 
    { 
     Foo1 
     Foo2 
     Foo3 
     Foo4 
     Foo5 
     Foo6 
    } 
} 

Invoke-Workflow 

的這個輸出是:

Foo1:10: 28:43

foo2的:10時28分43秒

Foo3:10點28分44秒

Foo5:10時28分44秒

Foo4:10時28分44秒

Foo6:10時28分46秒

顯示前5立即運行,然後在第6項必須等待爲以前的項目之一完成。

我看到很多文檔說明如何增加foreach循環中並行執行的次數。但是,如何增加將在並行塊中運行的項目數量?

回答

1

似乎沒有辦法增加將在並行塊中使用的線程數,或者如果有的話,很難找到。解決方法是使用Start-Job命令。您可以使用

Start-Job -Scriptblock {#do stuff here}

或者,如果它是更多的代碼比你想擁有在線,你可以把它運行一個腳本:

Start-Job -Filepath "c:\temp\job.ps1" -ArgumentList 1

這需要一些時間,每個作業旋轉起來,所以它們並不都是同時開始的。我跑了一個循環來運行開始作業命令並記錄他們開始的時間。每個作業都有30秒的睡眠時間,以便它不會立即死亡(並試圖強制執行的作業數量達到線程限制)。結果有所不同,但最多20次的測試表明它能夠同時運行至少至少能運行。在下面的結果中,一些是在第一個28秒後開始的,但請記住,由於睡眠時間爲30秒,第一個仍在運行。所以他們並沒有全部開始快速射擊,但有20個同時進行。

#1 started at 5/29/2015 2:17:25 PM 
#2 started at 5/29/2015 2:17:25 PM 
#3 started at 5/29/2015 2:17:26 PM 
#4 started at 5/29/2015 2:17:26 PM 
#5 started at 5/29/2015 2:17:27 PM 
#7 started at 5/29/2015 2:17:28 PM 
#6 started at 5/29/2015 2:17:28 PM 
#8 started at 5/29/2015 2:17:31 PM 
#9 started at 5/29/2015 2:17:37 PM 
#10 started at 5/29/2015 2:17:47 PM 
#12 started at 5/29/2015 2:17:53 PM 
#13 started at 5/29/2015 2:17:53 PM 
#15 started at 5/29/2015 2:17:53 PM 
#18 started at 5/29/2015 2:17:53 PM 
#11 started at 5/29/2015 2:17:53 PM 
#20 started at 5/29/2015 2:17:53 PM 
#14 started at 5/29/2015 2:17:53 PM 
#16 started at 5/29/2015 2:17:53 PM 
#17 started at 5/29/2015 2:17:53 PM 
#19 started at 5/29/2015 2:17:53 PM 

我也跨越了幾個其他方法使用PowerShell多線程運行,但是這是最容易理解和展示。這可能不是最好的。