加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – Powershell Throttle通过作业完成多线程作业

发布时间:2020-12-15 04:42:10 所属栏目:Java 来源:网络整理
导读:我发现的所有内容都使用预定义的睡眠时间来限制工作. 我需要油门等到工作完成后再开始新工作. 一次只能运行4个作业. 因此脚本将运行4并且当前暂停10秒然后运行其余部分. 我想要的是脚本只允许一次运行4个作业,并且当作业完成时,新的作业将被启动. 通过服务器
我发现的所有内容都使用预定义的睡眠时间来限制工作.
我需要油门等到工作完成后再开始新工作.
一次只能运行4个作业.

因此脚本将运行4并且当前暂停10秒然后运行其余部分.
我想要的是脚本只允许一次运行4个作业,并且当作业完成时,新的作业将被启动.

通过服务器名称列表初始化作业.

是否可以存档?

$servers = Get-Content "C:tempflashfilestoreserverlist.txt"

$scriptBlock = { #DO STUFF }


$MaxThreads = 4

foreach($server in $servers) {
     Start-Job -ScriptBlock $scriptBlock -argumentlist  $server 
     While($(Get-Job -State 'Running').Count -ge $MaxThreads) {
          sleep 10 #Need this to wait until a job is complete and kick off a new one.
     }
}
Get-Job | Wait-Job | Receive-Job

解决方法

您可以测试以下内容:

$servers = Get-Content "C:tempflashfilestoreserverlist.txt"
$scriptBlock = { #DO STUFF }
invoke-command -computerName $servers -scriptblock $scriptBlock -jobname 'YourJobSpecificName' -throttlelimit 4 -AsJob

此命令使用Invoke-Command cmdlet及其AsJob参数来启动在多台计算机上运行scriptblock的后台作业.由于该命令不能同时运行4次以上,因此该命令使用Invoke-Command的ThrottleLimit参数将并发命令数限制为4.

请注意该文件包含域中的计算机名称.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读