gpt4 book ai didi

windows - 并行执行 shell 命令但限制作业(没有 Cygwin 的 Windows)

转载 作者:可可西里 更新时间:2023-11-01 11:05:26 24 4
gpt4 key购买 nike

这是我正在尝试做的事情。假设我有一个名为 myprogram.exe 的程序,我必须执行 1000 次。

在 Windows 下,我通常可以做一些简单的事情:

for /L %n in (1,1,1000) do start /myfolder/myprogram.exe

但是,假设我只有 5 个 CPU 线程可以用于运行 myprogram.exe 的 1000 个实例,这样我只启动 5 个,然后当其中一个完成时启动另一个,等等,直到整个 1000 结束。

在 Linux 下并使用 GNU Parallel,我可以简单地做:

seq 1000 | parallel -N0 -j5 "nohup myprogram.exe"

我怎样才能在 Windows 命令行中实现类似的功能?请注意,在我的例子中,使用 Cygwin 不是一个选项,因此在 Windows 下求助于 xargs 和 GNU Parallel 也不是选项。

最佳答案

这里有一个方法,使用powershell来做进程计数。并使用简单的 set/a 作为计数器。

@echo off
setlocal enabledelayedexpansion
set /a cnt=0
:counter
if !cnt! lss 1000 (
for /F "tokens=*" %%i in ('powershell ^(Get-Process -Name 'myprogram'^).count') do set proc=%%i
if !proc! lss 5 (
start "C:\myfolder\myprogram.exe"
set /a cnt+=1
)
goto :counter
)

如果你想看到它计数,你可以在 goto :counter 之前的行中添加 echo !cnt!

它可以不使用delayedexpansion来完成,但我更喜欢在这里使用它。

关于windows - 并行执行 shell 命令但限制作业(没有 Cygwin 的 Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51834425/

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