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

Тема в разделе "Perl программирование", создана пользователем kashrman, 2 ноя 2012.

  1. kashrman

    kashrman New Member

    Регистрация:
    15 ноя 2011
    Сообщения:
    4
    Симпатии:
    0
    Возможно ли в 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 не помогли... Я не очень хорошо разбираюсь в особенностях межпроцессорного взаимодействия - подскажите, возможно ли вообще то, что я хочу?
    Спасибо, жду ответ.
     
Загрузка...
Похожие Темы - Сложное Межпроцессорное Взаимодействие
  1. Ice-ninJa
    Ответов:
    1
    Просмотров:
    1.884
  2. kashrman
    Ответов:
    0
    Просмотров:
    1.709

Поделиться этой страницей