gpt4 book ai didi

PowerShell 工作流线程限制

转载 作者:行者123 更新时间:2023-12-02 03:25:36 24 4
gpt4 key购买 nike

我有一个 PowerShell 工作流,看起来像这样,除了每个 Foo 函数所做的通常非常不同:

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

富二:10:28:43

富 3 : 10:28:44

富 5 : 10:28:44

富 4 : 10:28:44

Foo6 : 10:28:46

显示前 5 个立即运行,然后第 6 个项目必须等待前面的项目之一完成。

我看到很多文档展示了如何增加 foreach 循环中的并行执行次数。但是,如何增加将在并行 block 中运行的项目数?

最佳答案

似乎没有办法增加将在并行 block 中使用的线程数,或者如果有,也很难找到。一种解决方法是使用 Start-Job 命令。您可以使用
Start-Job -Scriptblock {#do stuff here}
或者,如果它的代码多于您想要的内联代码,您可以让它运行一个脚本:
Start-Job -Filepath "c:\temp\job.ps1" -ArgumentList 1
每个作业都需要一些时间来启动,因此它们不会同时启动。我运行了一个循环来运行 Start-Job 命令并记录它们开始的时间。每个作业都有 30 秒的 sleep 时间,这样它就不会立即死亡(并尝试强制运行的作业数量达到线程限制)。结果略有不同,但测试多达 20 个表明它能够运行 至少 这么多同时。在下面的结果中,有些是在第一个之后 28 秒启动的,但请记住,由于 30 秒的 sleep ,第一个仍在运行。所以他们并没有全部开始速射,而是有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 进行多线程处理的方法,但这是最容易理解和演示的。这可能不是最好的。

关于PowerShell 工作流线程限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30533050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com