[Cascavel-pm] Perl X RAM (memória)
Andre Carneiro
andregarciacarneiro em gmail.com
Quinta Janeiro 20 05:48:15 PST 2011
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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20110120/f5e26d74/attachment-0001.html>
Mais detalhes sobre a lista de discussão Cascavel-pm