[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