Использование рабочих процессов в Powershell

1165
user2676140

Я использовал только стандартный foreachцикл, который выполняется как следует. Тем не менее, у меня есть 8-ядерный процессор и 16 ГБ оперативной памяти, и я подумал, что я буду использовать такие с Parallel.foreachциклом. Ну, этот синтаксис работает как надо

$filelist = Get-ChildItem G:\GoodFilesForServer\ -filter *.mkv $num = $filelist | measure $filecount = $num.count  $i = 0; ForEach ($file in $filelist) { $Workflow:i++; $oldfile = $file.DirectoryName + "\" + $file.BaseName + $file.Extension; $newfile = $file.DirectoryName + "\" + $file.BaseName + ".mp4";  $progress = ($Workflow:i / $filecount) * 100 $progress = [Math]::Round($progress,2) Clear-Host Write-Host ------------------------------------------------------------------------------- Write-Host Handbrake Batch Encoding Write-Host "Processing - $oldfile" Write-Host "File $Workflow:i of $filecount - $progress%" Write-Host ------------------------------------------------------------------------------- Start-Process "C:\Program Files\HandBrake\HandBrakeCLI.exe" -ArgumentList "-i `"$oldfile`" -t 1 --angle 1 -c 1 -o `"$newfile`" -f mp4 -O --decomb --modulus 16 -e x264 -q 32 --vfr -a 1 -E lame -6 dpl2 -R Auto -B 48 -D 0 --gain 0 --audio-fallback ffac3 --x264-preset=veryslow --x264-profile=high --x264-tune=`"animation`" --h264-level=`"4.1`" --verbose=0" -Wait -NoNewWindow del $oldfile } 

Достаточно просто, но не Parallelэтот синтаксис не работает, и никакая ошибка не показана, чтобы помочь мне определить, почему он не работает.

Workflow ParallelTest { $filelist = Get-ChildItem G:\GoodFilesForServer\ -filter *.mkv $num = $filelist | measure $filecount = $num.count  $i = 0; ForEach -Parallel -ThrottleLimit 20 ($file in $filelist) { $Workflow:i++; $oldfile = $file.DirectoryName + "\" + $file.BaseName + $file.Extension; $newfile = $file.DirectoryName + "\" + $file.BaseName + ".mp4";  $progress = ($Workflow:i / $filecount) * 100 $progress = [Math]::Round($progress,2) Clear-Host Write-Host ------------------------------------------------------------------------------- Write-Host Handbrake Batch Encoding Write-Host "Processing - $oldfile" Write-Host "File $Workflow:i of $filecount - $progress%" Write-Host ------------------------------------------------------------------------------- Start-Process "C:\Program Files\HandBrake\HandBrakeCLI.exe" -ArgumentList "-i `"$oldfile`" -t 1 --angle 1 -c 1 -o `"$newfile`" -f mp4 -O --decomb --modulus 16 -e x264 -q 32 --vfr -a 1 -E lame -6 dpl2 -R Auto -B 48 -D 0 --gain 0 --audio-fallback ffac3 --x264-preset=veryslow --x264-profile=high --x264-tune=`"animation`" --h264-level=`"4.1`" --verbose=0" -Wait -NoNewWindow del $oldfile } } 

Что я должен изменить в своем Workflowсинтаксисе, чтобы иметь возможность запустить преобразование Parallel(кстати, если a ThrottleLimitиз 20 безумно пробовать, мы можем уменьшить это)

0
Вы, конечно, не можете `write-host` внутри рабочего процесса без InlineScript. что произойдет, если вы удалите все `x-host` из вашего рабочего процесса? SimonS 8 лет назад 0
@SimonS - если я удаляю все строки записи-хоста, все равно ничего не происходит. Например, в моем окне powershell, когда код выполнялся, он зависал на строке PS C: \ Users \ Me, но когда я выполняю это, нет задержки, он сразу записывает синтаксис в окно и новый C: \ Users Строка \ Me отображается (что происходит, когда код завершил выполнение) user2676140 8 лет назад 0
хм ... вы загружаете рабочий процесс в кеш сначала, а затем вызываете его, выполняя `ParallelTest`? рабочий процесс ведет себя как функция, поэтому его необходимо сначала загрузить в кэш, а затем вызвать. SimonS 8 лет назад 0
@SimonS - я не уверен, что вы имеете в виду под «загрузкой рабочего процесса в кэш», но я вызываю его с помощью ParallelTest user2676140 8 лет назад 0
вы выполняете весь свой `workflow parallelTest {#stuff}` (это загрузка в кеш), а затем выполняете `ParallelTest` (вызываете рабочий процесс). это то, что я имею в виду. Просто чтобы убедиться. SimonS 8 лет назад 0
Ах, да, именно так я выполняю. user2676140 8 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/42121/discussion-between-simons-and-user2676140). SimonS 8 лет назад 0

0 ответов на вопрос