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">&lt;<a href="mailto:andregarciacarneiro@gmail.com">andregarciacarneiro@gmail.com</a>&gt;</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 &#39;meros seres humanos&#39;, 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>&lt;code&gt;</div><div>use strict;</div><div>use warnings;</div><div>use AnyEvent;</div><div><div>my $done = AnyEvent-&gt;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-&gt;child (   #Esse watcher é específico para cuidar dos processos filhos gerados pelo fork</div>


<div>      pid =&gt; $pid,</div><div>      cb  =&gt; sub { #essa é a função de callback... Você pode implementa-la em outro lugar...</div><div>         my ($pid, $status) = @_;</div><div>         warn &quot;pid $pid exited with status $status&quot;; #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-&gt;send; </div><div>      },</div><div>   );</div><div>  </div><div>   # a grosso modo, espera o programa terminar...</div><div>   $done-&gt;recv;</div></div><div>}</div><div>&lt;/code&gt;<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">&lt;<a href="mailto:jasimioni@gmail.com" target="_blank">jasimioni@gmail.com</a>&gt;</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 &amp; 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>
[]&#39;s<br>
<br>
Joao Andre<br>
<br>
<br>
<br>
2011/1/20 Blabos de Blebe &lt;<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>&gt;:<br>
<div><div></div><div>&gt; Puta merda!<br>
&gt;<br>
&gt; Não é que se a gente não tomar cuidado bizonhice pega!<br>
&gt;<br>
&gt; Aff...<br>
&gt;<br>
&gt; 2011/1/20 Alexei Znamensky &lt;<a href="mailto:russoz@gmail.com" target="_blank">russoz@gmail.com</a>&gt;:<br>
&gt;&gt; Blabos<br>
&gt;&gt;<br>
&gt;&gt; 2011/1/20 Blabos de Blebe &lt;<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Não foi o que você perguntou, mas considere:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; <a href="http://foo.pl" target="_blank">foo.pl</a>:<br>
&gt;&gt;&gt; #!/usr/bin/perl<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; print $ARGV[0], $/;<br>
&gt;&gt;&gt; `sleep 5`;<br>
&gt;&gt;<br>
&gt;&gt; aspas invertidas?? WTF?<br>
&gt;&gt; perldoc -f sleep<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ___<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; perl -E &#39;while($i++ &lt; 10){system(&quot;./<a href="http://foo.pl" target="_blank">foo.pl</a>&quot;, $i)}&#39;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; perldoc -f system:<br>
&gt;&gt;&gt; Does exactly the same thing as exec LIST , except that a fork is done<br>
&gt;&gt;&gt; first, and the parent process waits for the child process to exit.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Então não tem chamada parelela nenhuma acontecendo.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Abraços<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 2011/1/20 Lindolfo Lorn Rodrigues &lt;<a href="http://lorn.br" target="_blank">lorn.br</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>&gt;:<br>
&gt;&gt;&gt; &gt; Cara, usar system não é uma boa pratica para cada chamada no system ele<br>
&gt;&gt;&gt; &gt; vai<br>
&gt;&gt;&gt; &gt; carregar um bash para tratar o STDOUT que você manda para o /dev/null,<br>
&gt;&gt;&gt; &gt; eu<br>
&gt;&gt;&gt; &gt; recomendo você dar uma olhada no POE, ele é um sistema de &#39;threads&#39; e<br>
&gt;&gt;&gt; &gt; você<br>
&gt;&gt;&gt; &gt; pode construir seu system dentro dele, e ele seria o seu &quot;script chefe&quot;<br>
&gt;&gt;&gt; &gt; porque ele foi feito para isso.<br>
&gt;&gt;&gt; &gt; 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>
&gt;&gt;&gt; &gt; ele,<br>
&gt;&gt;&gt; &gt; eu peguei um cookbook ( receita de bolo ) que mais se parecia com o meu<br>
&gt;&gt;&gt; &gt; problema e mudei um pouco com o meu programa e etc. No seu caso parece<br>
&gt;&gt;&gt; &gt; que<br>
&gt;&gt;&gt; &gt; você que gerenciar<br>
&gt;&gt;&gt; &gt; processos <a href="http://poe.perl.org/?POE_Cookbook/Child_Component" target="_blank">http://poe.perl.org/?POE_Cookbook/Child_Component</a>.<br>
&gt;&gt;&gt; &gt; Minha principal dica é, não use system faça seus programas Perl<br>
&gt;&gt;&gt; &gt; conversarem<br>
&gt;&gt;&gt; &gt; com eles mesmo usando IPC, TCP sei lá, o POE resolve tudo isso para você<br>
&gt;&gt;&gt; &gt; caso tenha alguma duvida pergunte ai, flw.<br>
&gt;&gt;&gt; &gt; 2011/1/20 Tom Mostard &lt;<a href="mailto:capmostarda@gmail.com" target="_blank">capmostarda@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Olá, pessoal!<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Estou tendo um problema de memória com scripts em Perl.<br>
&gt;&gt;&gt; &gt;&gt; Alguém aí teve algum problema parecido?<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Tenho um &quot;pequeno&quot; sistema que precisa executar vários scripts Perl em<br>
&gt;&gt;&gt; &gt;&gt; paralelo.<br>
&gt;&gt;&gt; &gt;&gt; Então existe um script Perl &quot;chefe&quot; que fica responsável por executar<br>
&gt;&gt;&gt; &gt;&gt; eles<br>
&gt;&gt;&gt; &gt;&gt; com parâmetros diferentes usando system().<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; O sistema acessa vários bancos de dados e a depender do banco, da<br>
&gt;&gt;&gt; &gt;&gt; tabela e<br>
&gt;&gt;&gt; &gt;&gt; do campo ele executa um módulo específico.<br>
&gt;&gt;&gt; &gt;&gt; Uso o MySQL em outra máquina para não abusar da memória.<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Script-chefe:<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; while ( my $i &lt; $execucoes ) # são execuções limitadas, mas por<br>
&gt;&gt;&gt; &gt;&gt; enquanto<br>
&gt;&gt;&gt; &gt;&gt; são 60<br>
&gt;&gt;&gt; &gt;&gt; {<br>
&gt;&gt;&gt; &gt;&gt;     system( &#39;./<a href="http://script.pl" target="_blank">script.pl</a> $parametro1 &gt; /dev/null &amp; &#39; );<br>
&gt;&gt;&gt; &gt;&gt; }<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Dentro do script é carregado um módulo usando require assim:<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; require $ARGV[ 0 ].&quot;.pm&quot;;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Funciona tudo certo, se rodo 20, funciona tudo normal e eles ocupam 158<br>
&gt;&gt;&gt; &gt;&gt; MB<br>
&gt;&gt;&gt; &gt;&gt; de memória.<br>
&gt;&gt;&gt; &gt;&gt; Se rodo 40, eles ocupam 316 MB de memória além da memória usada pelo<br>
&gt;&gt;&gt; &gt;&gt; sistema.<br>
&gt;&gt;&gt; &gt;&gt; Me parece que cada script carregado usa 8 MB em média. (Isso é<br>
&gt;&gt;&gt; &gt;&gt; possível/normal?)<br>
&gt;&gt;&gt; &gt;&gt; Quando uso 60, nem todos os scripts são executados.<br>
&gt;&gt;&gt; &gt;&gt; Existe alguma maneira de executar um script otimizando o uso de memória<br>
&gt;&gt;&gt; &gt;&gt; ou<br>
&gt;&gt;&gt; &gt;&gt; vou ter que reavaliar o código?<br>
&gt;&gt;&gt; &gt;&gt; Já revisei o código e eliminei arrays, variáveis de conexões com bancos<br>
&gt;&gt;&gt; &gt;&gt; desnecessárias.<br>
&gt;&gt;&gt; &gt;&gt; Existe algo mais que eu possa fazer?<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Abraços,<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Tom<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; &gt;&gt; Cascavel-pm mailing list<br>
&gt;&gt;&gt; &gt;&gt; <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
&gt;&gt;&gt; &gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; --<br>
&gt;&gt;&gt; &gt; lorn at lornlab dot org<br>
&gt;&gt;&gt; &gt; Lindolfo &quot;Lorn&quot; Rodrigues<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt;&gt; &gt; Cascavel-pm mailing list<br>
&gt;&gt;&gt; &gt; <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
&gt;&gt;&gt; &gt; <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; Cascavel-pm mailing list<br>
&gt;&gt;&gt; <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
&gt;&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Alexei Znamensky [russoz_gmail_com] [<a href="http://russoz.wordpress.com" target="_blank">russoz.wordpress.com</a>]<br>
&gt;&gt; [<a href="http://www.flickr.com/photos/alexeiz" target="_blank">www.flickr.com/photos/alexeiz</a>]<br>
&gt;&gt; «Only love / Can bring the rain / That makes you yearn to the sky»<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Cascavel-pm mailing list<br>
&gt;&gt; <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
&gt;&gt; <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
&gt;&gt;<br>
&gt; _______________________________________________<br>
&gt; Cascavel-pm mailing list<br>
&gt; <a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
&gt; <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
&gt;<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>