Great success :D Aliás, 2 notas: 1) $AnyEvent::Util::MAX_FORKS assegura que as coisas não saiam do controle. O valor default (10) é bem modesto. 2) A complexidade da serialização/transferência do resultado do child deve ser considerada. O edge case, para mim, foi passar string com HTML p/child, e esse retornar um objeto HTML::Tree. Só valeria a pena em sistemas com > 4 núcleos.
ABS() 2012/7/11 Junior Moraes <[email protected]> > Hi. > > Wooooooooh, nigga! Lindo! > Exatamente o que eu queria, e até melhor já que a comunicação é até > automatizada. =p > > Obrigado, Stan! :-D > > []'s > > Em 10 de julho de 2012 17:59, Stanislaw Pusep <[email protected]>escreveu: > > 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 <[email protected]> >> >>> 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: [email protected] >>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>> =end disclaimer >>> >>> >> >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> >> > > > -- > > > ______________________ > < Junior "fvox" Moraes > > ---------------------- > \ > \ > .--. > |o_o | > |:_/ | > // \ \ > (| | ) > /'\_ _/`\ > \___)=(___/ > > > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > >
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
