期望在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"
答案 0 :(得分:5)
核心并不重要,您可以并行运行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) 每天如果这样保持这样 - 我可能需要考虑切换到运行空间或工作流程以满足我的并行处理需求......