Запускайте различные команды Powershell на четырех ядрах параллельно

У меня есть скрипт, который выполняет кучу обработки изображений. Пока он работает последовательно, использует только одно ядро ​​и занимает вечность. У меня четыре ядра под рукой. Как я могу запустить четыре из этих команд одновременно?

convert.exe -density 200 -quality 80 -delete 0 -scene 1  C:\Users\mles\Desktop\ta2014\v33_1_21_Northland.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
convert.exe -density 200 -quality 80 -delete 0 -scene 22 C:\Users\mles\Desktop\ta2014\v33_22_31_Auckland.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
convert.exe -density 200 -quality 80 -delete 0 -scene 32 C:\Users\mles\Desktop\ta2014\v33_32_49_Waikato.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
convert.exe -density 200 -quality 80 -delete 0 -scene 50 C:\Users\mles\Desktop\ta2014\v33_50_62_Whanganui.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
convert.exe -density 200 -quality 80 -delete 0 -scene 63 C:\Users\mles\Desktop\ta2014\v33_63_69_Manawatu.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
convert.exe -density 200 -quality 80 -delete 0 -scene 70 C:\Users\mles\Desktop\ta2014\v33_70_75_Wellington.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
convert.exe -density 200 -quality 80 -delete 0 -scene 76 C:\Users\mles\Desktop\ta2014\v33_76_92_Marlborough.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
convert.exe -density 200 -quality 80 -delete 0 -scene 93 C:\Users\mles\Desktop\ta2014\v33_93_117_Canterbury.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
convert.exe -density 200 -quality 80 -delete 0 -scene 118 C:\Users\mles\Desktop\ta2014\v33_118_127_Otago.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
convert.exe -density 200 -quality 80 -delete 0 -scene 128 C:\Users\mles\Desktop\ta2014\v33_128_141_Southland.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg

Изменить: я задал новый вопрос, связанный с этим Как поставить команды powershell в массиве?


person mles    schedule 02.11.2014    source источник
comment
взгляните на stackoverflow.com/questions/12766174/   -  person Robert Levy    schedule 02.11.2014
comment
Также взгляните на RunspacePools thesurlyadmin.com/2013/02/11/multithreading -powershell-скрипты   -  person Matt    schedule 02.11.2014
comment
Спасибо, я уже нашел сайт thesurlyadmin, но не знал, с чего начать.   -  person mles    schedule 03.11.2014


Ответы (1)


Это должно быть довольно близко к тому, что вы хотите сделать. Однако я не могу проверить это.

РЕДАКТИРОВАТЬ Из комментария: я добавил некоторую логику, чтобы в любой момент времени выполнялись только 4 задания.

function Convert
{
    param ($scene, $source, $target, $density = "200", $quality = "80", $delete = "0")

    $running = @(Get-Job | ? {$_.State -eq 'Running'})
    while ($running.Count -gt 4) {
        $done = Get-Job | Wait-Job -Any
        $running = @(Get-Job | ? {$_.State -eq 'Running'})
    }

    $arguments = @($density, $quality, $delete, $scene, $source, $target)
    start-job -scriptblock { convert.exe -density $args[0] -quality $args[1] -delete $args[2] -scene $args[3] $args[4] $args[5]} -ArgumentList $arguments   

}

Convert 1  C:\Users\mles\Desktop\ta2014\v33_1_21_Northland.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
Convert 22 C:\Users\mles\Desktop\ta2014\v33_22_31_Auckland.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
Convert 32 C:\Users\mles\Desktop\ta2014\v33_32_49_Waikato.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
Convert 50 C:\Users\mles\Desktop\ta2014\v33_50_62_Whanganui.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
Convert 63 C:\Users\mles\Desktop\ta2014\v33_63_69_Manawatu.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
Convert 70 C:\Users\mles\Desktop\ta2014\v33_70_75_Wellington.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
Convert 76 C:\Users\mles\Desktop\ta2014\v33_76_92_Marlborough.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
Convert 93 C:\Users\mles\Desktop\ta2014\v33_93_117_Canterbury.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
Convert 118 C:\Users\mles\Desktop\ta2014\v33_118_127_Otago.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg
Convert 128 C:\Users\mles\Desktop\ta2014\v33_128_141_Southland.pdf C:\Users\mles\Desktop\ta2014\%03d.jpg

Get-Job | Wait-Job
Get-Job | Receive-Job
person Micky Balladelli    schedule 02.11.2014
comment
Закрыть да. Это запускает все задания сразу, а не 4 за раз. - person mles; 03.11.2014
comment
По какой-то причине ваш измененный ответ не запускает задания Convert 76 ... и Convert 118 ...? Пробовал 2 раза, но запускаются только 7 из 9 заданий. Ошибки в консоли нет. - person mles; 07.11.2014
comment
Почти. Он начинается с 5 потоков. Если я изменю блок while на $running.count -gt 3, он будет работать не более чем с 4 потоками. Немного поздно, но спасибо за ваши усилия! - person mles; 17.11.2014