Parallel::Forkmanager
- опция параллелизма. Вероятно, он был введен, чтобы значительно ускорить выполнение этого кода, и, удалив его снова - вы можете пожалеть об этом.
Однако - основная часть, которая работает параллельно, находится здесь:
my $skewerFM = Parallel::ForkManager->new(46); #this is where I do not know a solution
foreach my $skewerCommand(@skewerCommands) {
$skewerFM->start and next;
# print "Running the following command: \n$skewerCommand\n";
# system($skewerCommand);
$skewerFM->finish;
}
$skewerFM->wait_all_children();
Вы создаете экземпляр forkmanager. Вы запускаете код между «start» и «fini sh». И тогда вы ждете, пока все закончится sh.
Между start
и finish
- на самом деле вы ничего не делаете, потому что это закомментировано.
Так что просто удалите весь этот блок и строку use Parallel::ForkManager;
, и все будет в порядке.
Хотя вы могли бы захотеть выяснить, для чего нужен $skewerCommand
, почему он работал раньше и почему не работает сейчас.
Потому что без этого вы в основном сделали весь свой код избыточным.
Если, однако, это , а не , предназначенное для комментариев, вы можете просто вырезать следующие строки:
my $skewerFM = Parallel::ForkManager->new(46); #this is where I do not know a solution
$skewerFM->start and next;
$skewerFM->finish;
$skewerFM->wait_all_children();
(И начальная строка use
).
Тогда ваш код будет перебирать каждую строку в @skewerCommands
и запускать команду system
для каждой из них - но будет делать это последовательно, а не 46 способов параллельно. (Таким образом, вы можете ожидать, что это будет намного медленнее).