O sr. Stanislav foi quem me encorajou a começar a mexer com esse troço, e na verdade parece ser muito bom. <div><br></div><div>Qualquer dúvida, ou se eu escrevi alguma besteira(não testei o código) fala com o Stan que teve mais contato que eu com esse módulo.</div>
<div><br></div><div><br></div><div>Cheers!<br><br><div class="gmail_quote">Em 20 de janeiro de 2011 08:48, Andre Carneiro <span dir="ltr"><<a href="mailto:andregarciacarneiro@gmail.com">andregarciacarneiro@gmail.com</a>></span> escreveu:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Tem o AnyEvent também. Bem simples, e gerencia os forks bem melhor que 'meros seres humanos', embora pareça para mim bem menos complicado que o POE.<div>
<br></div><div>Encontrei algo que parece se adequar ao que você precisa na documentação:</div>
<div><br></div><div><code></div><div>use strict;</div><div>use warnings;</div><div>use AnyEvent;</div><div><div>my $done = AnyEvent->condvar; #condvar é um Watcher. Pra saber o que é isso, leia a doc. do módulo. Esse cara vai receber a condição que pode determinar, por exemplo, o fim da execução.</div>
<div> </div><div> my $pid = fork or exit 5; #gerando o processo ou saindo se não conseguir</div><div> my @scripts_to_run = somefunction_that_catch_the_scripts;</div><div>foreach my $sc(@scripts_to_run){</div><div> my $w = AnyEvent->child ( #Esse watcher é específico para cuidar dos processos filhos gerados pelo fork</div>
<div> pid => $pid,</div><div> cb => sub { #essa é a função de callback... Você pode implementa-la em outro lugar...</div><div> my ($pid, $status) = @_;</div><div> warn "pid $pid exited with status $status"; #imprime o pid do processo e o status.</div>
<div><br></div><div> #...vc pode rodar o seus script aqui com system, onde $sc tem o nome do script corrente, mas se valer a pena, talvez seja uma boa idéia que você coloque esses caras num módulo, e os execute como funções desse módulo aqui.</div>
<div><br></div>
<div> $done->send; </div><div> },</div><div> );</div><div> </div><div> # a grosso modo, espera o programa terminar...</div><div> $done->recv;</div></div><div>}</div><div></code><br><div><br>
</div><div><br></div><div><br></div><div><br></div><div><br></div><div>Cheers!<br><br><div class="gmail_quote">Em 20 de janeiro de 2011 07:46, João André Simioni <span dir="ltr"><<a href="mailto:jasimioni@gmail.com" target="_blank">jasimioni@gmail.com</a>></span> escreveu:<div>
<div></div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Blabos,<br>
<br>
Ele está chamando o <a href="http://script.pl" target="_blank">script.pl</a> com & comercial no final - assim a Shell<br>
imediatamente coloca o processo em background e o system retorna<br>
imediatamente. Ele consegue os múltiplos processos paralelos.<br>
<br>
Mas para o sistema operacional, é como se tivesse executado cada um<br>
deles separadamente e por isso a quantidade de memória excessiva (não<br>
compartilham nenhuma matriz de dados, nem nada assim).<br>
<br>
[]'s<br>
<br>
Joao Andre<br>
<br>
<br>
<br>
2011/1/20 Blabos de Blebe <<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>>:<br>
<div><div></div><div>> Puta merda!<br>
><br>
> Não é que se a gente não tomar cuidado bizonhice pega!<br>
><br>
> Aff...<br>
><br>
> 2011/1/20 Alexei Znamensky <<a href="mailto:russoz@gmail.com" target="_blank">russoz@gmail.com</a>>:<br>
>> Blabos<br>
>><br>
>> 2011/1/20 Blabos de Blebe <<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>><br>
>>><br>
>>> Não foi o que você perguntou, mas considere:<br>
>>><br>
>>> <a href="http://foo.pl" target="_blank">foo.pl</a>:<br>
>>> #!/usr/bin/perl<br>
>>><br>
>>> print $ARGV[0], $/;<br>
>>> `sleep 5`;<br>
>><br>
>> aspas invertidas?? WTF?<br>
>> perldoc -f sleep<br>
>><br>
>>><br>
>>> ___<br>
>>><br>
>>> perl -E 'while($i++ < 10){system("./<a href="http://foo.pl" target="_blank">foo.pl</a>", $i)}'<br>
>>><br>
>>> perldoc -f system:<br>
>>> Does exactly the same thing as exec LIST , except that a fork is done<br>
>>> first, and the parent process waits for the child process to exit.<br>
>>><br>
>>><br>
>>> Então não tem chamada parelela nenhuma acontecendo.<br>
>>><br>
>>> Abraços<br>
>>><br>
>>> 2011/1/20 Lindolfo Lorn Rodrigues <<a href="http://lorn.br" target="_blank">lorn.br</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>>:<br>
>>> > Cara, usar system não é uma boa pratica para cada chamada no system ele<br>
>>> > vai<br>
>>> > carregar um bash para tratar o STDOUT que você manda para o /dev/null,<br>
>>> > eu<br>
>>> > recomendo você dar uma olhada no POE, ele é um sistema de 'threads' e<br>
>>> > você<br>
>>> > pode construir seu system dentro dele, e ele seria o seu "script chefe"<br>
>>> > porque ele foi feito para isso.<br>
>>> > E ele tem um cookbook <a href="http://poe.perl.org/?POE_Cookbook" target="_blank">http://poe.perl.org/?POE_Cookbook</a> quando eu usei<br>
>>> > ele,<br>
>>> > eu peguei um cookbook ( receita de bolo ) que mais se parecia com o meu<br>
>>> > problema e mudei um pouco com o meu programa e etc. No seu caso parece<br>
>>> > que<br>
>>> > você que gerenciar<br>
>>> > processos <a href="http://poe.perl.org/?POE_Cookbook/Child_Component" target="_blank">http://poe.perl.org/?POE_Cookbook/Child_Component</a>.<br>
>>> > Minha principal dica é, não use system faça seus programas Perl<br>
>>> > conversarem<br>
>>> > com eles mesmo usando IPC, TCP sei lá, o POE resolve tudo isso para você<br>
>>> > caso tenha alguma duvida pergunte ai, flw.<br>
>>> > 2011/1/20 Tom Mostard <<a href="mailto:capmostarda@gmail.com" target="_blank">capmostarda@gmail.com</a>><br>
>>> >><br>
>>> >> Olá, pessoal!<br>
>>> >><br>
>>> >> Estou tendo um problema de memória com scripts em Perl.<br>
>>> >> Alguém aí teve algum problema parecido?<br>
>>> >><br>
>>> >> Tenho um "pequeno" sistema que precisa executar vários scripts Perl em<br>
>>> >> paralelo.<br>
>>> >> Então existe um script Perl "chefe" que fica responsável por executar<br>
>>> >> eles<br>
>>> >> com parâmetros diferentes usando system().<br>
>>> >><br>
>>> >> O sistema acessa vários bancos de dados e a depender do banco, da<br>
>>> >> tabela e<br>
>>> >> do campo ele executa um módulo específico.<br>
>>> >> Uso o MySQL em outra máquina para não abusar da memória.<br>
>>> >><br>
>>> >> Script-chefe:<br>
>>> >><br>
>>> >> while ( my $i < $execucoes ) # são execuções limitadas, mas por<br>
>>> >> enquanto<br>
>>> >> são 60<br>
>>> >> {<br>
>>> >> system( './<a href="http://script.pl" target="_blank">script.pl</a> $parametro1 > /dev/null & ' );<br>
>>> >> }<br>
>>> >><br>
>>> >> Dentro do script é carregado um módulo usando require assim:<br>
>>> >><br>
>>> >> require $ARGV[ 0 ].".pm";<br>
>>> >><br>
>>> >> Funciona tudo certo, se rodo 20, funciona tudo normal e eles ocupam 158<br>
>>> >> MB<br>
>>> >> de memória.<br>
>>> >> Se rodo 40, eles ocupam 316 MB de memória além da memória usada pelo<br>
>>> >> sistema.<br>
>>> >> Me parece que cada script carregado usa 8 MB em média. (Isso é<br>
>>> >> possível/normal?)<br>
>>> >> Quando uso 60, nem todos os scripts são executados.<br>
>>> >> Existe alguma maneira de executar um script otimizando o uso de memória<br>
>>> >> ou<br>
>>> >> vou ter que reavaliar o código?<br>
>>> >> Já revisei o código e eliminei arrays, variáveis de conexões com bancos<br>
>>> >> desnecessárias.<br>
>>> >> Existe algo mais que eu possa fazer?<br>
>>> >><br>
>>> >> Abraços,<br>
>>> >><br>
>>> >> Tom<br>
>>> >><br>
>>> >> _______________________________________________<br>
>>> >> Cascavel-pm mailing list<br>
>>> >> <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
>>> >> <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
>>> ><br>
>>> ><br>
>>> ><br>
>>> > --<br>
>>> > lorn at lornlab dot org<br>
>>> > Lindolfo "Lorn" Rodrigues<br>
>>> ><br>
>>> ><br>
>>> > _______________________________________________<br>
>>> > Cascavel-pm mailing list<br>
>>> > <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
>>> > <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
>>> ><br>
>>> _______________________________________________<br>
>>> Cascavel-pm mailing list<br>
>>> <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
>>> <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
>><br>
>><br>
>><br>
>> --<br>
>> Alexei Znamensky [russoz_gmail_com] [<a href="http://russoz.wordpress.com" target="_blank">russoz.wordpress.com</a>]<br>
>> [<a href="http://www.flickr.com/photos/alexeiz" target="_blank">www.flickr.com/photos/alexeiz</a>]<br>
>> «Only love / Can bring the rain / That makes you yearn to the sky»<br>
>><br>
>> _______________________________________________<br>
>> Cascavel-pm mailing list<br>
>> <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
>> <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
>><br>
> _______________________________________________<br>
> Cascavel-pm mailing list<br>
> <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
><br>
_______________________________________________<br>
Cascavel-pm mailing list<br>
<a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
</div></div></blockquote></div></div></div><br><br clear="all"><div class="im"><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br>(11)82907780<br>
</div></div></div>
</blockquote></div><br><br clear="all"><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br>(11)82907780<br>
</div>