2015-09-17 2 views
0
sub parallelizing{ 
    my counter = 0; 
    my $MAX_PROCESS = 10; 
    my $workerQueue = Parallel::ForkManager->new($MAX_PROCESS); 

    $workerQueue->start and next; 
    print "$process #" . $counter . " started\n"; 
    $counter = $counter +1 
    $workerQueue->finish; 
} 

Я использую Parallel::ForkManager для создания дочерних процессов, которые разделяют переменную $counter, но оказывается, что это не разделяет. Есть ли способ разрешить дочерним процессам совместно использовать переменную?Параллелизация Обработка массива

+2

Вам нужно будет поговорить с родительским процессом и назначить родительский элемент. Может быть проще предварительно нарезать массив и ручные куски каждому работнику. – simbabque

+0

Используйте [forks :: shared] (http://p3rl.org/forks::shared) или [threads :: shared] (http://p3rl.org/threads::shared), если вам нужно обмениваться данными. – choroba

+0

Этот код не будет компилироваться по нескольким причинам. Пожалуйста, напишите * реальный * код, который вы написали и протестировали. – Borodin

ответ

0

Короткий ответ - нет, не так. fork создает отдельный экземпляр процесса с собственным состоянием памяти. Он реализует механизм copy-on-write (обычно), поэтому он достаточно эффективен. Но процессы не могут делиться памятью тривиально.

Однако вы можете сделать что-то вроде threads::shared, чтобы создать резьбовое; доступная по нескольким вещам. (Хотя обычно я предлагаю использовать Thread::Queue).

Нечто подобное: Perl daemonize with child daemons Возможно, приведу несколько полезных примеров.

Смежные вопросы