powershell的并行foreach最多使用5个线程吗?

2023-12-23

The throttlelimit的参数foreach -parallel可以控制执行脚本时使用多少个进程。但即使我设置了,我也不能有超过5个进程throttlelimit大于5。

该脚本在多个 powershell 进程中执行。所以我检查脚本内的PID。然后对 PID 进行分组,以便我可以知道有多少个进程用于执行该脚本。

function GetPID() {
    $PID
}

workflow TestWorkflow {
    param($throttlelimit)
    foreach -parallel -throttlelimit $throttlelimit ($i in 1..100) {
        GetPID
    }
}

foreach ($i in 1..8) {
    $pids = TestWorkflow -throttlelimit $i
    $measure = $pids | group | Measure-Object
    $measure.Count
}

输出是

1
2
3
4
5
5
5
5

For $i小于或等于 5,我有$i流程。但对于$i大于5,我只有5个进程。有什么办法可以增加执行脚本时的进程数吗?

编辑:为了回应@SomeShinyObject的答案,我添加了另一个测试用例。这是@SomeShinyObject 给出的示例的修改。我添加了一个功能S,除了休眠 10 秒之外什么也不做。

function S($n) {
    $s = Get-Date
    $s.ToString("HH:mm:ss.ffff") + " start sleep " + $n
    sleep 10
    $e = Get-Date
    $e.ToString("HH:mm:ss.ffff") + " end sleep " + $n + " diff " + (($e-$s).TotalMilliseconds)
}

Workflow Throttle-Me {
    [cmdletbinding()]
    param (
        [int]$ThrottleLimit = 10,
        [int]$CollectionLimit = 10
    )

    foreach -parallel -throttlelimit $ThrottleLimit ($n in 1..$CollectionLimit){
        $s = Get-Date
        $s.ToString("HH:mm:ss.ffff") + " start " + $n
        S $n
        $e = Get-Date
        $e.ToString("HH:mm:ss.ffff") + " end " + $n + " diff " + (($e-$s).TotalMilliseconds)
    }
}

Throttle-Me -ThrottleLimit 10 -CollectionLimit 20

这是输出。我按时间(秒数)对输出进行分组,并在每个组中进行了一些重新排序以使其更清晰。这个功能很明显S被称为 5 by 5,尽管我设置了throttlelimit到 10(首先我们有start sleep 6..10,10秒后,我们有start sleep 1..5,10秒后start sleep 11..15,10秒后start sleep 16..20).

03:40:29.7147 start 10
03:40:29.7304 start 9
03:40:29.7304 start 8
03:40:29.7459 start 7
03:40:29.7459 start 6
03:40:29.7616 start 5
03:40:29.7772 start 4
03:40:29.7772 start 3
03:40:29.7928 start 2
03:40:29.7928 start 1

03:40:35.3067 start sleep 7
03:40:35.3067 start sleep 8
03:40:35.3067 start sleep 9
03:40:35.3692 start sleep 10
03:40:35.4629 start sleep 6

03:40:45.3292 end sleep 7 diff 10022.5353
03:40:45.3292 end sleep 8 diff 10022.5353
03:40:45.3292 end sleep 9 diff 10022.5353
03:40:45.3761 end sleep 10 diff 10006.8765
03:40:45.4855 end sleep 6 diff 10022.5243
03:40:45.3605 end 9 diff 15630.1005
03:40:45.3917 end 7 diff 15645.7465
03:40:45.3917 end 8 diff 15661.3313
03:40:45.4229 end 10 diff 15708.2274
03:40:45.5323 end 6 diff 15786.3969
03:40:45.4386 start sleep 5
03:40:45.4542 start sleep 4
03:40:45.4542 start sleep 3
03:40:45.4698 start sleep 2
03:40:45.5636 start sleep 1
03:40:45.4698 start 11
03:40:45.4855 start 12
03:40:45.5011 start 13
03:40:45.5167 start 14
03:40:45.6105 start 15

03:40:55.4596 end sleep 3 diff 10005.4374
03:40:55.4596 end sleep 4 diff 10005.4374
03:40:55.4596 end sleep 5 diff 10021.0426
03:40:55.4752 end sleep 2 diff 10005.3992
03:40:55.5690 end sleep 1 diff 10005.3784
03:40:55.4752 end 3 diff 25698.0221
03:40:55.4909 end 5 diff 25729.302
03:40:55.5065 end 4 diff 25729.2523
03:40:55.5221 end 2 diff 25729.2559
03:40:55.6159 end 1 diff 25823.032
03:40:55.5534 start sleep 11
03:40:55.5534 start sleep 12
03:40:55.5690 start sleep 13
03:40:55.5846 start sleep 14
03:40:55.6784 start sleep 15
03:40:55.6002 start 16
03:40:55.6002 start 17
03:40:55.6159 start 18
03:40:55.6326 start 19
03:40:55.7096 start 20

03:41:05.5692 end sleep 11 diff 10015.8226
03:41:05.5692 end sleep 12 diff 10015.8226
03:41:05.5848 end sleep 13 diff 10015.8108
03:41:05.6004 end sleep 14 diff 10015.8128
03:41:05.6942 end sleep 15 diff 10015.8205
03:41:05.5848 end 12 diff 20099.3218
03:41:05.6004 end 11 diff 20130.5719
03:41:05.6161 end 13 diff 20114.9729
03:41:05.6473 end 14 diff 20130.5962
03:41:05.6942 end 15 diff 20083.7506
03:41:05.6317 start sleep 17
03:41:05.6317 start sleep 16
03:41:05.6473 start sleep 18
03:41:05.6629 start sleep 19
03:41:05.7411 start sleep 20

03:41:15.6320 end sleep 16 diff 10000.3608
03:41:15.6320 end sleep 17 diff 10000.3608
03:41:15.6477 end sleep 18 diff 10000.3727
03:41:15.6633 end sleep 19 diff 10000.3709
03:41:15.7414 end sleep 20 diff 10000.3546
03:41:15.6477 end 16 diff 20047.4375
03:41:15.6477 end 17 diff 20047.4375
03:41:15.6633 end 18 diff 20047.4295
03:41:15.7101 end 19 diff 20077.5169
03:41:15.7414 end 20 diff 20031.7909

我相信你的测试有点缺陷。根据这个TechNet 文章 https://technet.microsoft.com/en-us/library/jj574187(v=ws.11).aspx, $PID不是脚本工作流程中的可用变量。

可以在此找到更好的测试和解释site http://www.happysysadm.com/2013/06/how-to-throttle-workflow-activites-in.html

基本上,ThrottleLimit设置为理论值[Int32]::MaxValue。海报设计了一个更好的测试来检查并行处理(稍作修改):

Workflow Throttle-Me {
    [cmdletbinding()]
    param (
        [int]$ThrottleLimit = 10,
        [int]$CollectionLimit = 10
    )

    foreach -parallel -throttlelimit $ThrottleLimit ($n in 1..$CollectionLimit){
        "Working on $n"
        "{0:hh}:{0:mm}:{0:ss}" -f (Get-Date)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

powershell的并行foreach最多使用5个线程吗? 的相关文章

随机推荐

  • 仅使用 SSE2 提取 SSE 混洗的 32 位值

    我正在尝试以有效的方式从 128 位寄存器中提取 4 个字节 问题是每个值都在一个单独的 32 位中 120 0 0 0 55 0 0 0 42 0 0 0 120 0 0 0 我想将128位转换为32位它的形式 120 55 42 120
  • Lombok 不生成 getters/setters(使用 Luna 或命令行编译)

    我第一次尝试龙目岛 我尝试尽可能地遵循指示 但是当我查看编译的类 使用反编译器 时 它们没有任何生成的 getter 或 setter 我的安装步骤 下载lombok 1 14 8并运行java jar lombok jar 它将 lomb
  • 用于执行 cvs 到 svn 迁移的 cvs2svn 替代方案

    我正在尝试在运行 OS X Server 的新 XServe 服务器上执行从 cvs 到 svn 的迁移 OS X 预装的 cvs2svn 和 dbm 库之间存在已知冲突 错误为 错误 cvs2svn 使用anydbm 包 该包依赖于较低级
  • 有人可以向我解释一下这个功能是如何工作的吗?

    我正在学习编码 并试图理解高阶函数和抽象 我不明白这段代码如何运行以返回 true function greaterThan n return function m return m gt n var greaterThan10 great
  • 在 Qt 中集成 Bullet 简单演示

    我想将 Bullet 演示集成到 Qt 应用程序中 我使用的是 Bullet 附带的 Bullet 演示示例 名为 App BasicDemo 如果我在没有 Qt 的情况下执行此应用程序 它会打开一个窗口并呈现得很好 所以我想 如果我只是把
  • 如何使用js触发'contenteditable'元素进入编辑状态?

    我想使用 contenteditable 属性实现元素就地编辑 是否可以通过鼠标事件模拟而不是用户单击进入编辑状态 function triggerEvent element eventType let rect element getBo
  • AttributeError:“命名空间”对象没有属性

    我正在编写一个程序 使用urllib2从 http 站点下载 CSV 数据 该程序在 Python 中运行时工作正常 但我也尝试使用argparse能够从命令行输入 url 当我运行它时 出现以下错误 File urlcsv py line
  • Amazon ELB 自动运行状况检查有什么作用以及它的期望是什么?

    事情是这样的 我们已经实现了一个 C RESTful API 服务器 带有内置的 HTTP 解析器 并且没有像 apache 或任何类似的标准 HTTP 服务器 它已经在 Amazon 结构中使用了几个月 使用普通通信和 SSL 通信 并且
  • 使用页面对象模型访问嵌套 div

    我在访问嵌套 div 时遇到问题 这是我的场景 我需要访问内部 div 中的总计 有人可以在这里解释一下吗 div div class title Requests Sent div div class total 10 div div d
  • 如何启用通过超链接打开的 UWP 应用(深层链接)

    我已关注这个链接 https learn microsoft com en us windows uwp launch resume web to app linking并实现了 使用应用程序 URI 处理程序的网站应用程序 但是 该链接仅
  • 命令行工具输出后如何更改其输出?

    我注意到很多命令行工具 例如 wget 会将进度显示为数字或进度条 随着进程的完成而前进 虽然这个问题并不是真正特定于语言的 但在我最常使用的命令行工具语言 C Node js Haskell 中 我还没有找到一种方法来做到这一点 Here
  • NSDateFormatter 显示错误的年份

    我在 iOS 6 中使用 xcode 4 5 4G182 NSDateFormatter 在 iOS 6 中显示错误的年份 如何解决 NSDateFormatter dateFormatter NSDateFormatter alloc i
  • IE 中的 moz-border-radius,moz-box-shadow

    我正在使用 moz border radius webkit border top left radius 将圆角 div 添加到我的网站 这些在 Mozilla chrome 和 safari 中工作得很好 但像往常一样 Internet
  • 具有接口继承的 Winforms 数据绑定

    在我因为这个问题而更改应用程序的域之前 我需要有人确认我所看到的内容 问题是 当针对相互继承的接口进行数据绑定时 您无法看到基本接口上的属性 我正在开发一个使用数据绑定的 WinForms 应用程序 这是在 net3 5中 不 我不能使用w
  • 如何在命令行上提供非 Base 64 编码的密钥

    关于AWS S3工具 同步 和 客户提供的加密密钥 它说here http docs aws amazon com cli latest reference s3 sync html sse c key 字符串 客户提供的加密密钥 用于服务
  • History.pushState 之后前进按钮不起作用

    我已经找到了如何修复后退按钮 但前进按钮仍然无法修复 网址会更改 但页面不会重新加载 这就是我正在使用的 anchor wrapper css position relative slanted css top 0 Do something
  • PHP 错误:警告:无法修改标头信息 - [重复] 已发送标头

    这个问题在这里已经有答案了 您好 我正在用 PHP 编写一个简单的邮件脚本 我发现的每个人都说它可能是前面的空白 但正如你所看到的 我在我的代码中找不到类似互联网上解决方案的内容 错误说 输出从 customers e e 5 httpd
  • 运行时控制台中的核心数据信息和错误

    我在运行时在控制台中遇到了以下消息 我不知道为什么 我到处搜索过 似乎没有人遇到这个 信息 获取响应无法打开文件 Users userName Library Application Support iPhone Simulator 7 0
  • 如何在 C# 中生成唯一的文件名

    我已经实现了一种算法 将为保存在硬盘驱动器上的文件生成唯一的名称 我正在追加DateTime 小时 分钟 秒和毫秒但它仍然会生成重复的文件名 因为我一次上传多个文件 为要存储在硬盘驱动器上的文件生成唯一名称以便没有两个文件相同的最佳解决方案
  • powershell的并行foreach最多使用5个线程吗?

    The throttlelimit的参数foreach parallel可以控制执行脚本时使用多少个进程 但即使我设置了 我也不能有超过5个进程throttlelimit大于5 该脚本在多个 powershell 进程中执行 所以我检查脚本