[Cascavel-pm] Perl X RAM (memória)

Andre Carneiro andregarciacarneiro em gmail.com
Quinta Janeiro 20 05:53:56 PST 2011


O sr. Stanislav foi quem me encorajou a começar a mexer com esse troço, e na
verdade parece ser muito bom.

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.


Cheers!

Em 20 de janeiro de 2011 08:48, Andre Carneiro <
andregarciacarneiro em gmail.com> escreveu:

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



-- 
André Garcia Carneiro
Analista/Desenvolvedor Perl
(11)82907780
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20110120/164d8ea8/attachment-0001.html>


Mais detalhes sobre a lista de discussão Cascavel-pm