Сложное Межпроцессорное Взаимодействие

kashrman

New member
15.11.2011
3
0
#1
Возможно ли в PERLе такое межпроцессорное взаимодействие: возвращение объекта из дочернего процесса? Задача такая - параллельно крутятся процессы (полученные fork-ом) и каждый инициализирует и заполняет данными объект(по объекту на процесс), который должен потом вернуться в родительский процесс для дальнейшей работы в родителе с объектами от детей. Совместное использование переменных в разных процессах очень простое - IPC::Shareable например. А вот сложные структуры так отработать не получается. Для демонстрации, например, надо вернуть объект Imager->new(), но вот тогда IPC::Shareable уже не работает:
<!--shcode--><pre><code class='perl'>use warnings;use strict;use 5.10.1;
use IPC::Shareable;
use Imager;

my ($common, $bufer);
$common = tie $bufer, 'IPC::Shareable', undef, {destroy => 1};

my $child = fork();

if ($child){

waitpid($child,0);
print "--PARENT:\n\t\$common = $common_var\n\t\$bufer = $bufer\n";

}else{

$bufer = 'foo';
#$bufer = Imager->new();# if no coment, this string write warn:
# Could not create semaphore set: No space left on device
print "--CHILD:\n\t\$common = $common_var\n\t\$bufer = $bufer\n";

}

exit;[/CODE]

Причем возвращать нужно именно объект, а не сами данные - просто передать их через pipe и потом заново в родителе инициализировать объект по этим данным можно, но это очень неэффективно по времени - не годится.

Как быть с совместным использованием объектов? В-принципе объекты для каждого процесса может инициализировать родитель и передавать детям ссылку, а в дочерних процессах эти объекты заполняются, но ведь даже так не работает:
<!--shcode--><pre><code class='perl'>$common = tie $bufer, 'IPC::Shareable', undef, {destroy => 1};
$bufer = Graphics::Magick->new();# Could not create semaphore set: No space left on device[/CODE]

Perldoc и Camelbook не помогли... Я не очень хорошо разбираюсь в особенностях межпроцессорного взаимодействия - подскажите, возможно ли вообще то, что я хочу?
Спасибо, жду ответ.