簡體   English   中英

Powershell作業未並行執行

[英]powershell jobs not executed in parallel

預計此操作將在5秒鍾以上運行(假設我有4個內核,並且每個作業都可以在每個內核上運行)。

$emailTimes =  @(0) * 4  

Write-Host "[$(Get-Date -Format HH:mm:ss.fff)] Starting"  
for ($index=0;$index -lt ($emailTimes.length); $index++) {  
  Start-Job -Name "job$index" -ScriptBlock {sleep 5}  
}  
Write-Host "[$(Get-Date -Format HH:mm:ss.fff)] Waiting"  
Get-Job | Wait-Job  
Get-Job | Receive-Job  
Write-Host "[$(Get-Date -Format HH:mm:ss.fff)] Completed"  

核心無關緊要,您可以並行運行一個核心的100個作業。

我現在所做的是:

foreach ($i in 1..10 ) { Start-Job -ScriptBlock {SLEEP -Seconds 5} }
MEASURE-COMMAND { Get-Job|Wait-Job }

它完成於:

TotalSeconds      : 6,2208058

然而,一旦我得到,運行幾次:

TotalSeconds      : 14,3781632

所以它可能很慢,但是肯定是並行運行的

我已經開始檢查這一點,我認為OP可能正在解決某些問題。 並行地開始了一些工作,例如:

    get-job|remove-job
echo "start:"
get-date -UFormat " %H:%M:%S"
1..18| % { 
    Start-Job -ScriptBlock {
        $obj = ""|select starttime, runtime, finishtime 
        $obj.starttime = get-date -UFormat " %H:%M:%S"
        $obj.runtime = measure-command {SLEEP -Seconds 1}|select -ExpandProperty totalseconds
        $obj.finishtime = get-date -UFormat " %H:%M:%S"
        $obj
    } |out-null 

} 
echo "finished spinning up jobs at:"
get-date -UFormat " %H:%M:%S"
echo "all jobs finished at "
Get-Job|Wait-Job |out-null
get-date -UFormat " %H:%M:%S"
echo "run time of each job"

get-job|receive-job| ft

結果是這樣的輸出:

start:
 23:04:27
finished spinning up jobs at:
 23:04:31
all jobs finished at
 23:05:23
run time of each job

starttime   runtime finishtime
---------   ------- ----------
 23:05:07 1,0037849  23:05:08
 23:05:07 1,0037791  23:05:08
 23:05:22 1,0036025  23:05:23
 23:05:22 1,0040943  23:05:23
 23:05:22  1,003943  23:05:23
 23:05:22 1,0116236  23:05:23
 23:05:22 1,0217624  23:05:23
 23:05:22 1,0056518  23:05:23
 23:05:22 1,0038563  23:05:23
 23:05:22 1,0082825  23:05:23
 23:05:22 1,0042454  23:05:23
 23:05:22 1,0033923  23:05:23
 23:05:22 1,0128473  23:05:23
 23:05:22 1,0190476  23:05:23
 23:05:22 1,0188348  23:05:23
 23:05:22 1,0235496  23:05:23
 23:05:22 1,0058239  23:05:23
 23:05:22 1,0153528  23:05:23

請注意,從腳本開始到第一次作業開始需要40秒的延遲,而在開始2和休息之間要間隔15秒?

並行運行的作業越多-越差。 以10秒鍾的睡眠來啟動100個工作(這樣,在開始所有工作之前就不會完成)只是掛了PS窗口而從未完成...這很奇怪,因為我正在使用數百個工作,每個工作都需要10秒鍾以上才能完成,以前從未遇到過此類問題。

這需要對不同的機器(可能是OS /處理器/防病毒軟件)和不同的Powershell版本進行進一步測試。

我還認為,也許這是啟動睡眠功能所特有的,但不是-使用不同的方法使它運行幾秒鍾並仍然具有相同的效果。 必須檢查一下,因為我每天都使用Powershell作業(主要是invoke-command -asjob),如果這種情況一直如此-我可能需要考慮切換到運行空間或工作流以滿足我的並行處理需求...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM