Многопроцессорная обработка через Perl в Windows - PullRequest
0 голосов
/ 04 января 2012

Я написал этот код, который должен открыть несколько процессов, проблема в том, что он хорошо работает на Linux, но когда я выполняю его на Windows, он просто создает один процесс !! Возможно ли создать многопроцессорное на Windows с Perl

$j = ARGV[0];
for($i=1; $i<=$j; $i++){
system("perl example.pl word.txt.$i &");
}

Ответы [ 3 ]

6 голосов
/ 04 января 2012

& это вещь * nix.Явное fork в Windows сделает это.

Имейте в виду, что реализации Perl для Windows эмулируют разветвление с использованием потоков, так что это может быть другой вариант.

my @pids;
for my $i (1 .. $j) {

    my $pid = fork;

    unless ( $pid ) {  # Child
        system("perl example.pl word.txt.$i");
        exit 0;
    }

    push @pids, $pid;
}

waitpid $_, 0 foreach @pids;
3 голосов
/ 04 января 2012

Лучше fork из прилагаемого сценария Perl, а затем вызвать system в дочернем процессе без завершающего &. wait понадобится и в родительском.

Поскольку аргумент system анализируется системной оболочкой, вы столкнетесь с поведением, отличным от оболочки Windows, например, от Bash.

0 голосов
/ 04 января 2012

Гораздо проще использовать команду START (пакетная команда Windows), чем для ветвления процессов.Недостатком является то, что он откроет несколько окон DOS.

system "start perl example.pl word.txt.$i";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...