如果我运行一个脚本,该脚本使用并行处理递归地处理路径以在整个树上执行命令,如果项目,我是否保证我使用的命令将在单个目录中的所有项目上执行,然后再进入下一个?
Get-ChildItem $Path -Recurse -Filter *.some_file_extension | ForEach-Object -Parallel {
my_command $_ --with_options
}
如果我运行一个脚本,该脚本使用并行处理递归地处理路径以在整个树上执行命令,如果项目,我是否保证我使用的命令将在单个目录中的所有项目上执行,然后再进入下一个?
Get-ChildItem $Path -Recurse -Filter *.some_file_extension | ForEach-Object -Parallel {
my_command $_ --with_options
}
在运行时-Parallel
,以下脚本不会传递$basePath
并行块开始之前声明的变量。相反,它是一个空值。当脚本未在其中运行时,这不是问题-Parallel
——它将传递变量值并按预期运行。仅供参考,我正在运行 PS 7.x。
$basePath=((get-location) -replace "\\", "\\")
get-childitem *.tif -recurse | foreach-object -Parallel {
$a=($_ -split "\.tif")[0]
$path=(((split-path $_) -replace "$basePath", "O:\OD\FM\OneDrive\FM\Family Photos") -replace "TIF", "JPG")
$b=(($a -replace "$basePath", "O:\OD\FM\OneDrive\FM\Family Photos") -replace "TIF", "JPG")
if (!(Test-Path -path $path)) {mkdir "$path"}
if (!([system.io.file]::Exists("$b.jpg"))) {
magick convert "$a.tif" -resize 50% -quality 100 -define jpeg:extent=1024KB "$b.jpg"
[console]::foregroundcolor="Green"
echo "`nB`:`t$b`n`n"
}
} -ThrottleLimit 8
[console]::foregroundcolor="White"
我想在一个 bash 文件中运行一个多并行任务,如下面的示例代码,
for i in 1 2 3 4 5 6 7 8; do
setsid python /tmp/t.py ${i} 1>>/tmp/1.log 2>&1 &
done
wait # first wait
echo "next wait"
for i in 9 10 11 12 13 14 15 16; do
setsid python /tmp/t.py ${i} 1>>/tmp/1.log 2>&1 &
done
wait # second wait
如您所见,wait
可以这样做吗?我想运行前 8 个任务,然后wait
完成所有任务,然后生成接下来的 8 个任务,因为 RAM 有限,我无法在一轮中运行所有 16 个任务。