[SP-pm] AnyEvent::Util::fork_call() e IPC

Stanislaw Pusep creaktive at gmail.com
Tue Jul 10 13:59:31 PDT 2012


Cara, não é bem por aí que se usa fork_call :)
Infelizmente, tive que dar um RTFS para cair a ficha, então sua dúvida é
mais do que compreensível.
Trocando em miúdos, fork_call funciona da seguinte maneira:

my $cv = AnyEvent->condvar;
for my $url (@{$urls}) {
    $cv->begin;
    fork_call {
        return extract_links($url);
    } sub {
        push @pool, @{shift};
        $cv->end;
    }
}
$cv->wait;

Traduzindo: o primeiro bloco sub {} é o que rodará dentro do child. O
resultado retornado dentro desse bloco sofre um freeze() e é retornado, via
canal IPC adequado para o seu OS (pipe em UN*X, socket TCP em Win), para o
parent. O segundo bloco roda no parent, recebe o buffer do child, dá um
thaw() e retorna em @_. Ou seja, lembre-se disso: o primeiro bloco é child,
o segundo é parent. Child herda o escopo léxico do parent, mas somente
devolve o q vc quiser retornar.

ABS()



2012/7/10 Junior Moraes <juniiior182 em gmail.com>

> Hi.
>
> Estou tendo um (óbvio) problema pra sharear variáveis utilizando o método
> fork_call() do módulo AnyEvent::Util, e como tudo o que eu menos quero é
> usar threads, então preciso de ajuda.
>
> Como o próprio nome do método diz, já esperava ter exatamente este
> problema por se tratar de um *fork* visto que um processo não acessa o
> outro, mas esperava achar uma solução mais simples pra conseguir fazer o
> IPC.
>
> Alguém já trabalhou com este método e conseguiu obter uma solução
> interessante?
> Escrevi um código simplório pra vocês entenderem melhor. No caso, o array
> *@pool* que vem zerado, já que o push ocorre num processo separado :(
> https://gist.github.com/3086129
>
> Alguma *fucking* idéia?
>
> Obrigado desde já!
> []'s
>
>
> --
>
>
>  ______________________
> < Junior "fvox" Moraes >
>  ----------------------
>    \
>     \
>         .--.
>        |o_o |
>        |:_/ |
>       //   \ \
>      (|     | )
>     /'\_   _/`\
>     \___)=(___/
>
>
>
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20120710/74708cce/attachment.html>


More information about the SaoPaulo-pm mailing list