From perl em mosconi.mat.br Sun Apr 9 12:19:58 2017 From: perl em mosconi.mat.br (Rodrigo Mosconi) Date: Sun, 9 Apr 2017 16:19:58 -0300 Subject: [Rio-pm] ES de Abril Message-ID: Então pessoal, Nesta terça deve ser o ES deste mês. Algum lugar? -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From oainikusama em gmail.com Sun Apr 9 12:26:04 2017 From: oainikusama em gmail.com (breno) Date: Sun, 09 Apr 2017 19:26:04 +0000 Subject: [Rio-pm] ES de Abril In-Reply-To: References: Message-ID: Ih, não poderei ir nesse. Bebam por mim! \o/ On Sun, Apr 9, 2017 at 9:21 PM Rodrigo Mosconi wrote: > Então pessoal, > > Nesta terça deve ser o ES deste mês. Algum lugar? > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From fernandocorrea em gmail.com Sun Apr 9 13:48:39 2017 From: fernandocorrea em gmail.com (Fernando Oliveira) Date: Sun, 9 Apr 2017 17:48:39 -0300 Subject: [Rio-pm] ES de Abril In-Reply-To: References: Message-ID: <69D22E41-C034-485F-9429-97C38AF276F4@gmail.com> Mercadinho? Enviado do meu iPhone > Em 9 de abr de 2017, às 16:26, breno escreveu: > > Ih, não poderei ir nesse. Bebam por mim! \o/ > >> On Sun, Apr 9, 2017 at 9:21 PM Rodrigo Mosconi wrote: >> Então pessoal, >> >> Nesta terça deve ser o ES deste mês. Algum lugar? >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm em pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From elianemart em gmail.com Mon Apr 10 12:32:13 2017 From: elianemart em gmail.com (Eliane Martins) Date: Mon, 10 Apr 2017 16:32:13 -0300 Subject: [Rio-pm] Digest Rio-pm, volume 141, assunto 1 In-Reply-To: References: Message-ID: Olá, Meu nome é Eliane (podem chamar de Lili) e me inscrevi por indicação de um amigo que faz parte do grupo há alguns anos. A linguagem que eu mais mexo é Python, mas já vi algumas outras, Perl ainda não tive contato. Em 10 de abril de 2017 16:01, escreveu: > Enviar submissões para a lista de discussão Rio-pm para > rio-pm em pm.org > > Para se cadastrar ou descadastrar via WWW, visite o endereço > http://mail.pm.org/mailman/listinfo/rio-pm > ou, via email, envie uma mensagem com a palavra 'help' no assunto ou > corpo da mensagem para > rio-pm-request em pm.org > > Você poderá entrar em contato com a pessoa que gerencia a lista pelo > endereço > rio-pm-owner em pm.org > > Quando responder, por favor edite sua linha Assunto assim ela será > mais específica que "Re: Contents of Rio-pm digest..." > > > Tópicos de Hoje: > > 1. ES de Abril (Rodrigo Mosconi) > 2. Re: ES de Abril (breno) > 3. Re: ES de Abril (Fernando Oliveira) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Sun, 9 Apr 2017 16:19:58 -0300 > From: Rodrigo Mosconi > To: Perl Mongers Rio de Janeiro > Subject: [Rio-pm] ES de Abril > Message-ID: > A em mail.gmail.com> > Content-Type: text/plain; charset="utf-8" > > Então pessoal, > > Nesta terça deve ser o ES deste mês. Algum lugar? > -------------- Próxima Parte ---------- > Um anexo em HTML foi limpo... > URL: 55df3370/attachment-0001.html> > > ------------------------------ > > Message: 2 > Date: Sun, 09 Apr 2017 19:26:04 +0000 > From: breno > To: Perl Mongers Rio de Janeiro > Subject: Re: [Rio-pm] ES de Abril > Message-ID: > gmail.com> > Content-Type: text/plain; charset="utf-8" > > Ih, não poderei ir nesse. Bebam por mim! \o/ > > On Sun, Apr 9, 2017 at 9:21 PM Rodrigo Mosconi > wrote: > > > Então pessoal, > > > > Nesta terça deve ser o ES deste mês. Algum lugar? > > _______________________________________________ > > Rio-pm mailing list > > Rio-pm em pm.org > > http://mail.pm.org/mailman/listinfo/rio-pm > -------------- Próxima Parte ---------- > Um anexo em HTML foi limpo... > URL: 540301e7/attachment-0001.html> > > ------------------------------ > > Message: 3 > Date: Sun, 9 Apr 2017 17:48:39 -0300 > From: Fernando Oliveira > To: Perl Mongers Rio de Janeiro > Subject: Re: [Rio-pm] ES de Abril > Message-ID: <69D22E41-C034-485F-9429-97C38AF276F4 em gmail.com> > Content-Type: text/plain; charset="utf-8" > > Mercadinho? > > Enviado do meu iPhone > > > Em 9 de abr de 2017, às 16:26, breno escreveu: > > > > Ih, não poderei ir nesse. Bebam por mim! \o/ > > > >> On Sun, Apr 9, 2017 at 9:21 PM Rodrigo Mosconi > wrote: > >> Então pessoal, > >> > >> Nesta terça deve ser o ES deste mês. Algum lugar? > >> _______________________________________________ > >> Rio-pm mailing list > >> Rio-pm em pm.org > >> http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > > Rio-pm mailing list > > Rio-pm em pm.org > > http://mail.pm.org/mailman/listinfo/rio-pm > -------------- Próxima Parte ---------- > Um anexo em HTML foi limpo... > URL: 5f6eb5e4/attachment-0001.html> > > ------------------------------ > > Subject: Legenda do Digest > > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm > > ------------------------------ > > Fim da Digest Rio-pm, volume 141, assunto 1 > ******************************************* > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From fernandocorrea em gmail.com Mon Apr 10 12:38:34 2017 From: fernandocorrea em gmail.com (Fernando Oliveira) Date: Mon, 10 Apr 2017 16:38:34 -0300 Subject: [Rio-pm] Digest Rio-pm, volume 141, assunto 1 In-Reply-To: References: Message-ID: <53A5FEEF-E019-4903-A4F7-2092EE8F3E4F@gmail.com> Seja bem vinda! Aproveito p/ avisar que amanhã será o nosso encontro social no mercadinho São José! Te esperamos lá! (E a todos os outros tb) Enviado do meu iPhone > Em 10 de abr de 2017, às 16:32, Eliane Martins escreveu: > > Olá, > Meu nome é Eliane (podem chamar de Lili) e me inscrevi por indicação de um amigo que faz parte do grupo há alguns anos. > A linguagem que eu mais mexo é Python, mas já vi algumas outras, Perl ainda não tive contato. > > Em 10 de abril de 2017 16:01, escreveu: >> Enviar submissões para a lista de discussão Rio-pm para >> rio-pm em pm.org >> >> Para se cadastrar ou descadastrar via WWW, visite o endereço >> http://mail.pm.org/mailman/listinfo/rio-pm >> ou, via email, envie uma mensagem com a palavra 'help' no assunto ou >> corpo da mensagem para >> rio-pm-request em pm.org >> >> Você poderá entrar em contato com a pessoa que gerencia a lista pelo >> endereço >> rio-pm-owner em pm.org >> >> Quando responder, por favor edite sua linha Assunto assim ela será >> mais específica que "Re: Contents of Rio-pm digest..." >> >> >> Tópicos de Hoje: >> >> 1. ES de Abril (Rodrigo Mosconi) >> 2. Re: ES de Abril (breno) >> 3. Re: ES de Abril (Fernando Oliveira) >> >> >> ---------------------------------------------------------------------- >> >> Message: 1 >> Date: Sun, 9 Apr 2017 16:19:58 -0300 >> From: Rodrigo Mosconi >> To: Perl Mongers Rio de Janeiro >> Subject: [Rio-pm] ES de Abril >> Message-ID: >> >> Content-Type: text/plain; charset="utf-8" >> >> Então pessoal, >> >> Nesta terça deve ser o ES deste mês. Algum lugar? >> -------------- Próxima Parte ---------- >> Um anexo em HTML foi limpo... >> URL: >> >> ------------------------------ >> >> Message: 2 >> Date: Sun, 09 Apr 2017 19:26:04 +0000 >> From: breno >> To: Perl Mongers Rio de Janeiro >> Subject: Re: [Rio-pm] ES de Abril >> Message-ID: >> >> Content-Type: text/plain; charset="utf-8" >> >> Ih, não poderei ir nesse. Bebam por mim! \o/ >> >> On Sun, Apr 9, 2017 at 9:21 PM Rodrigo Mosconi wrote: >> >> > Então pessoal, >> > >> > Nesta terça deve ser o ES deste mês. Algum lugar? >> > _______________________________________________ >> > Rio-pm mailing list >> > Rio-pm em pm.org >> > http://mail.pm.org/mailman/listinfo/rio-pm >> -------------- Próxima Parte ---------- >> Um anexo em HTML foi limpo... >> URL: >> >> ------------------------------ >> >> Message: 3 >> Date: Sun, 9 Apr 2017 17:48:39 -0300 >> From: Fernando Oliveira >> To: Perl Mongers Rio de Janeiro >> Subject: Re: [Rio-pm] ES de Abril >> Message-ID: <69D22E41-C034-485F-9429-97C38AF276F4 em gmail.com> >> Content-Type: text/plain; charset="utf-8" >> >> Mercadinho? >> >> Enviado do meu iPhone >> >> > Em 9 de abr de 2017, às 16:26, breno escreveu: >> > >> > Ih, não poderei ir nesse. Bebam por mim! \o/ >> > >> >> On Sun, Apr 9, 2017 at 9:21 PM Rodrigo Mosconi wrote: >> >> Então pessoal, >> >> >> >> Nesta terça deve ser o ES deste mês. Algum lugar? >> >> _______________________________________________ >> >> Rio-pm mailing list >> >> Rio-pm em pm.org >> >> http://mail.pm.org/mailman/listinfo/rio-pm >> > _______________________________________________ >> > Rio-pm mailing list >> > Rio-pm em pm.org >> > http://mail.pm.org/mailman/listinfo/rio-pm >> -------------- Próxima Parte ---------- >> Um anexo em HTML foi limpo... >> URL: >> >> ------------------------------ >> >> Subject: Legenda do Digest >> >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm em pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm >> >> ------------------------------ >> >> Fim da Digest Rio-pm, volume 141, assunto 1 >> ******************************************* > > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From astec em centroin.com.br Mon Apr 10 12:48:10 2017 From: astec em centroin.com.br (astec) Date: Mon, 10 Apr 2017 16:48:10 -0300 Subject: [Rio-pm] RES: Digest Rio-pm, volume 141, assunto 1 In-Reply-To: References: Message-ID: <002501d2b233$63533780$29f9a680$@centroin.com.br> Bem vinda, Lili. Julio Cezar De: Rio-pm [mailto:rio-pm-bounces+astec=centroin.com.br em pm.org] Em nome de Eliane Martins Enviada em: segunda-feira, 10 de abril de 2017 16:32 Para: rio-pm em pm.org Assunto: Re: [Rio-pm] Digest Rio-pm, volume 141, assunto 1 Olá, Meu nome é Eliane (podem chamar de Lili) e me inscrevi por indicação de um amigo que faz parte do grupo há alguns anos. A linguagem que eu mais mexo é Python, mas já vi algumas outras, Perl ainda não tive contato. Em 10 de abril de 2017 16:01, escreveu: Enviar submissões para a lista de discussão Rio-pm para rio-pm em pm.org Para se cadastrar ou descadastrar via WWW, visite o endereço http://mail.pm.org/mailman/listinfo/rio-pm ou, via email, envie uma mensagem com a palavra 'help' no assunto ou corpo da mensagem para rio-pm-request em pm.org Você poderá entrar em contato com a pessoa que gerencia a lista pelo endereço rio-pm-owner em pm.org Quando responder, por favor edite sua linha Assunto assim ela será mais específica que "Re: Contents of Rio-pm digest..." Tópicos de Hoje: 1. ES de Abril (Rodrigo Mosconi) 2. Re: ES de Abril (breno) 3. Re: ES de Abril (Fernando Oliveira) ---------------------------------------------------------------------- Message: 1 Date: Sun, 9 Apr 2017 16:19:58 -0300 From: Rodrigo Mosconi To: Perl Mongers Rio de Janeiro Subject: [Rio-pm] ES de Abril Message-ID: Content-Type: text/plain; charset="utf-8" Então pessoal, Nesta terça deve ser o ES deste mês. Algum lugar? -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: ------------------------------ Message: 2 Date: Sun, 09 Apr 2017 19:26:04 +0000 From: breno To: Perl Mongers Rio de Janeiro Subject: Re: [Rio-pm] ES de Abril Message-ID: > Content-Type: text/plain; charset="utf-8" Ih, não poderei ir nesse. Bebam por mim! \o/ On Sun, Apr 9, 2017 at 9:21 PM Rodrigo Mosconi wrote: > Então pessoal, > > Nesta terça deve ser o ES deste mês. Algum lugar? > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: ------------------------------ Message: 3 Date: Sun, 9 Apr 2017 17:48:39 -0300 From: Fernando Oliveira To: Perl Mongers Rio de Janeiro Subject: Re: [Rio-pm] ES de Abril Message-ID: <69D22E41-C034-485F-9429-97C38AF276F4 em gmail.com> Content-Type: text/plain; charset="utf-8" Mercadinho? Enviado do meu iPhone > Em 9 de abr de 2017, às 16:26, breno escreveu: > > Ih, não poderei ir nesse. Bebam por mim! \o/ > >> On Sun, Apr 9, 2017 at 9:21 PM Rodrigo Mosconi wrote: >> Então pessoal, >> >> Nesta terça deve ser o ES deste mês. Algum lugar? >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm em pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: ------------------------------ Subject: Legenda do Digest _______________________________________________ Rio-pm mailing list Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm ------------------------------ Fim da Digest Rio-pm, volume 141, assunto 1 ******************************************* -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From guedes_1000 em hotmail.com Tue May 23 11:44:51 2017 From: guedes_1000 em hotmail.com (Aureliano Guedes) Date: Tue, 23 May 2017 18:44:51 +0000 Subject: [Rio-pm] Metodos de Download em Massa Message-ID: Ola Monges, Gostaria de saber qual metodo vocês mais gostam para fazer downloads em massa. Eu usava muito LWP, recentemente comecei usar uma combinação de Parallel::ForkManager e Furl, mas pra meu tipo de dado tem truncado parte dos download. (vale uma dica pra lidar com dados truncados?) No meu caso, eu to fazendo download de mais me milhoes de sequencias, pra isso eu sigo a regra do servidor e peço apenas 500 por vez e limito em 10 fork. Tem outros metodos que posso usar mas acabo perdendo e muito a eficiência. Por isso pretendo testar um benchmark em varias formas diferentes. Bom, sei que existem ferramentas, BioPerl, etc... Abraços, acpguedes -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From oainikusama em gmail.com Tue May 23 20:54:47 2017 From: oainikusama em gmail.com (breno) Date: Wed, 24 May 2017 03:54:47 +0000 Subject: [Rio-pm] Metodos de Download em Massa In-Reply-To: References: Message-ID: Oi Aureliano, se você está interessado em benchmarks, pode experimentar o LWP::Curl em vez do Furl, ou se tiver paciência pra ir direto ao metal, Net::Curl ou WWW::Curl. O que quer dizer com "truncado"? Se a conexão cai depois de X bytes baixados (e se vc consegue garantir que o arquivo parcial contém apenas dados válidos), vc pode baixar só o que falta e depois juntar os dois pedaços na mão. Por exemplo, se o arquivo parcial foi baixado em "parcial.tmp": ---------8<--------- my $ua = Furl->new; my $res = $ua->get( 'http://exemplo.com/arquivo.tmp', Range => 'byes=' . -s 'parcial.tmp' . '-'); open my $ fh, '>>', 'parcial.tmp; print $fh, $res->content; close $fh; ---------8<--------- (código não testado, estou no celular) Se o servidor suporta conteúdo parcial (ele responde o primeiro request com Accept-Ranges), isso deve baixar o resto do arquivo. Idealmente, em vez de sobrescever o arquivo parcial, vc junta o conteúdo dos dois em um terceiro arquivo. Finalmente, se quiser baixar vários pedaços do arquivo em paralelo, pode experimentar o HTTP::Range e o LWP::Parallel::UserAgent, ou se inspirar neles e implementar sua própria solução paralela com Furl ou LWP::Curl. []s -b On 23:26, Tue, 23 May 2017 Aureliano Guedes, wrote: > Ola Monges, > > > Gostaria de saber qual metodo vocês mais gostam para fazer downloads em > massa. > > > Eu usava muito LWP, recentemente comecei usar uma combinação de > Parallel::ForkManager e Furl, mas pra meu tipo de dado tem truncado parte > dos download. (vale uma dica pra lidar com dados truncados?) > > No meu caso, eu to fazendo download de mais me milhoes de sequencias, pra > isso eu sigo a regra do servidor e peço apenas 500 por vez e limito em 10 > fork. > > Tem outros metodos que posso usar mas acabo perdendo e muito a eficiência. > Por isso pretendo testar um benchmark em varias formas diferentes. > > Bom, sei que existem ferramentas, BioPerl, etc... > > Abraços, > acpguedes > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From renato.cron em gmail.com Wed May 24 03:46:23 2017 From: renato.cron em gmail.com (Renato Santos) Date: Wed, 24 May 2017 07:46:23 -0300 Subject: [Rio-pm] Metodos de Download em Massa In-Reply-To: References: Message-ID: Eu costumo usar o yada http://search.cpan.org/~syp/AnyEvent-Net-Curl-Queued-0.047/bin/yada On May 24, 2017 12:55 AM, "breno" wrote: > Oi Aureliano, > > se você está interessado em benchmarks, pode experimentar o LWP::Curl em > vez do Furl, ou se tiver paciência pra ir direto ao metal, Net::Curl ou > WWW::Curl. > > O que quer dizer com "truncado"? Se a conexão cai depois de X bytes > baixados (e se vc consegue garantir que o arquivo parcial contém apenas > dados válidos), vc pode baixar só o que falta e depois juntar os dois > pedaços na mão. Por exemplo, se o arquivo parcial foi baixado em > "parcial.tmp": > > ---------8<--------- > my $ua = Furl->new; > my $res = $ua->get( 'http://exemplo.com/arquivo.tmp', Range => 'byes=' . > -s 'parcial.tmp' . '-'); > open my $ fh, '>>', 'parcial.tmp; > print $fh, $res->content; > close $fh; > ---------8<--------- > > (código não testado, estou no celular) > > Se o servidor suporta conteúdo parcial (ele responde o primeiro request > com Accept-Ranges), isso deve baixar o resto do arquivo. Idealmente, em vez > de sobrescever o arquivo parcial, vc junta o conteúdo dos dois em um > terceiro arquivo. > > Finalmente, se quiser baixar vários pedaços do arquivo em paralelo, pode > experimentar o HTTP::Range e o LWP::Parallel::UserAgent, ou se inspirar > neles e implementar sua própria solução paralela com Furl ou LWP::Curl. > > []s > -b > > On 23:26, Tue, 23 May 2017 Aureliano Guedes, > wrote: > >> Ola Monges, >> >> >> Gostaria de saber qual metodo vocês mais gostam para fazer downloads em >> massa. >> >> >> Eu usava muito LWP, recentemente comecei usar uma combinação de >> Parallel::ForkManager e Furl, mas pra meu tipo de dado tem truncado parte >> dos download. (vale uma dica pra lidar com dados truncados?) >> >> No meu caso, eu to fazendo download de mais me milhoes de sequencias, pra >> isso eu sigo a regra do servidor e peço apenas 500 por vez e limito em 10 >> fork. >> >> Tem outros metodos que posso usar mas acabo perdendo e muito a >> eficiência. Por isso pretendo testar um benchmark em varias formas >> diferentes. >> >> Bom, sei que existem ferramentas, BioPerl, etc... >> >> Abraços, >> acpguedes >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm em pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm > > > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From guedes_1000 em hotmail.com Wed May 24 08:20:42 2017 From: guedes_1000 em hotmail.com (Aureliano Guedes) Date: Wed, 24 May 2017 15:20:42 +0000 Subject: [Rio-pm] Metodos de Download em Massa In-Reply-To: References: , Message-ID: Opa, Yada achei muito complicado pra pouca coisa que vou fazer. Mas to convencido a tentar. Breno, o truncado é por causa que estou fazendo varios downloads com o Parallel::ForkManager de um arquivo no formato texto, onde cada identificador é um dado do arquivo, como eu trabalho com milhoes desses identificadores e o servidor recomenda se limitar a 500 por requisição acaba que tenho que fazer varios downloads. So que to imprimindo tudo em STDOUT e redirecionando a saida pra um aarquivo estilo UNIX mesmo > , então tem varios processo tenetando escrever na tela ao mesmo tempo, eu pensei em fazer um lock mas acho q isso vai fazer demorar. Exatamente aqui é o problema, IPC::ShareTable ou algo assim deve resolver. Alguma sujestão de solução ? my $pm = new Parallel::ForkManager($req); while(my $id = <$IN>){ $cnt++; chomp $id; if ($cnt == $split || $. == $nl){ #$split = 500; push @ids, $id; my @tmp = @ids; undef @ids; $cnt = 0; $pm->start and next; # do the fork my @resp = get_fasta(\@tmp, $db, $timeout); if ($resp[0]){ $resp[1] =~ s/^\s*\n+//mg; print STDOUT $resp[1]; } else{ print STDERR "Status: $resp[2]\n$resp[3]\nDetails: $resp[1]\n"; print STDERR join (" ", "Fail:", @tmp, "\n"); } $pm->finish; #tihs is a fork, at the end (here) the memory will be released } else{ push @ids, $id; } } $pm->wait_all_children; ________________________________ From: Rio-pm on behalf of breno Sent: Wednesday, May 24, 2017 3:54:47 AM To: Perl Mongers Rio de Janeiro Subject: Re: [Rio-pm] Metodos de Download em Massa Oi Aureliano, se você está interessado em benchmarks, pode experimentar o LWP::Curl em vez do Furl, ou se tiver paciência pra ir direto ao metal, Net::Curl ou WWW::Curl. O que quer dizer com "truncado"? Se a conexão cai depois de X bytes baixados (e se vc consegue garantir que o arquivo parcial contém apenas dados válidos), vc pode baixar só o que falta e depois juntar os dois pedaços na mão. Por exemplo, se o arquivo parcial foi baixado em "parcial.tmp": ---------8<--------- my $ua = Furl->new; my $res = $ua->get( 'http://exemplo.com/arquivo.tmp', Range => 'byes=' . -s 'parcial.tmp' . '-'); open my $ fh, '>>', 'parcial.tmp; print $fh, $res->content; close $fh; ---------8<--------- (código não testado, estou no celular) Se o servidor suporta conteúdo parcial (ele responde o primeiro request com Accept-Ranges), isso deve baixar o resto do arquivo. Idealmente, em vez de sobrescever o arquivo parcial, vc junta o conteúdo dos dois em um terceiro arquivo. Finalmente, se quiser baixar vários pedaços do arquivo em paralelo, pode experimentar o HTTP::Range e o LWP::Parallel::UserAgent, ou se inspirar neles e implementar sua própria solução paralela com Furl ou LWP::Curl. []s -b On 23:26, Tue, 23 May 2017 Aureliano Guedes, > wrote: Ola Monges, Gostaria de saber qual metodo vocês mais gostam para fazer downloads em massa. Eu usava muito LWP, recentemente comecei usar uma combinação de Parallel::ForkManager e Furl, mas pra meu tipo de dado tem truncado parte dos download. (vale uma dica pra lidar com dados truncados?) No meu caso, eu to fazendo download de mais me milhoes de sequencias, pra isso eu sigo a regra do servidor e peço apenas 500 por vez e limito em 10 fork. Tem outros metodos que posso usar mas acabo perdendo e muito a eficiência. Por isso pretendo testar um benchmark em varias formas diferentes. Bom, sei que existem ferramentas, BioPerl, etc... Abraços, acpguedes _______________________________________________ Rio-pm mailing list Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From leprevostfv em gmail.com Wed May 24 12:53:48 2017 From: leprevostfv em gmail.com (Felipe Leprevost) Date: Wed, 24 May 2017 19:53:48 +0000 Subject: [Rio-pm] Metodos de Download em Massa In-Reply-To: References: Message-ID: Apenas como curiosidade Aureliano, de onde você está tentando obter os arquivos ? On Wed, May 24, 2017 at 3:21 PM Felipe da Veiga Leprevost < felipe em leprevost.com.br> wrote: > Apenas como curiosidade Aureliano, de onde você está tentando obter os > arquivos ? > > On Wed, May 24, 2017 at 3:19 PM Aureliano Guedes > wrote: > >> Opa, >> >> Yada achei muito complicado pra pouca coisa que vou fazer. Mas to >> convencido a tentar. >> >> Breno, o truncado é por causa que estou fazendo varios downloads com o >> Parallel::ForkManager de um arquivo no formato texto, onde cada >> identificador é um dado do arquivo, como eu trabalho com milhoes desses >> identificadores e o servidor recomenda se limitar a 500 por requisição >> acaba que tenho que fazer varios downloads. So que to imprimindo tudo em >> STDOUT e redirecionando a saida pra um aarquivo estilo UNIX mesmo > , então >> tem varios processo tenetando escrever na tela ao mesmo tempo, eu pensei em >> fazer um lock mas acho q isso vai fazer demorar. >> >> >> Exatamente aqui é o problema, IPC::ShareTable ou algo assim deve >> resolver. Alguma sujestão de solução ? >> >> >> my $pm = new Parallel::ForkManager($req); >> while(my $id = <$IN>){ >> $cnt++; >> chomp $id; >> if ($cnt == $split || $. == $nl){ #$split = 500; >> push @ids, $id; >> my @tmp = @ids; >> undef @ids; >> $cnt = 0; >> $pm->start and next; # do the fork >> my @resp = get_fasta(\@tmp, $db, $timeout); >> if ($resp[0]){ >> $resp[1] =~ s/^\s*\n+//mg; >> print STDOUT $resp[1]; >> } >> else{ >> print STDERR "Status: $resp[2]\n$resp[3]\nDetails: $resp[1]\n"; >> print STDERR join (" ", "Fail:", @tmp, "\n"); >> } >> $pm->finish; #tihs is a fork, at the end (here) the memory will be >> released >> } >> else{ >> push @ids, $id; >> } >> } >> $pm->wait_all_children; >> >> >> ------------------------------ >> *From:* Rio-pm on behalf >> of breno >> *Sent:* Wednesday, May 24, 2017 3:54:47 AM >> *To:* Perl Mongers Rio de Janeiro >> *Subject:* Re: [Rio-pm] Metodos de Download em Massa >> >> >> Oi Aureliano, >> >> se você está interessado em benchmarks, pode experimentar o LWP::Curl em >> vez do Furl, ou se tiver paciência pra ir direto ao metal, Net::Curl ou >> WWW::Curl. >> >> O que quer dizer com "truncado"? Se a conexão cai depois de X bytes >> baixados (e se vc consegue garantir que o arquivo parcial contém apenas >> dados válidos), vc pode baixar só o que falta e depois juntar os dois >> pedaços na mão. Por exemplo, se o arquivo parcial foi baixado em >> "parcial.tmp": >> >> ---------8<--------- >> my $ua = Furl->new; >> my $res = $ua->get( 'http://exemplo.com/arquivo.tmp', Range => 'byes=' . >> -s 'parcial.tmp' . '-'); >> open my $ fh, '>>', 'parcial.tmp; >> print $fh, $res->content; >> close $fh; >> ---------8<--------- >> >> (código não testado, estou no celular) >> >> Se o servidor suporta conteúdo parcial (ele responde o primeiro request >> com Accept-Ranges), isso deve baixar o resto do arquivo. Idealmente, em vez >> de sobrescever o arquivo parcial, vc junta o conteúdo dos dois em um >> terceiro arquivo. >> >> Finalmente, se quiser baixar vários pedaços do arquivo em paralelo, pode >> experimentar o HTTP::Range e o LWP::Parallel::UserAgent, ou se inspirar >> neles e implementar sua própria solução paralela com Furl ou LWP::Curl. >> >> []s >> -b >> >> On 23:26, Tue, 23 May 2017 Aureliano Guedes, >> wrote: >> >>> Ola Monges, >>> >>> >>> Gostaria de saber qual metodo vocês mais gostam para fazer downloads em >>> massa. >>> >>> >>> Eu usava muito LWP, recentemente comecei usar uma combinação de >>> Parallel::ForkManager e Furl, mas pra meu tipo de dado tem truncado parte >>> dos download. (vale uma dica pra lidar com dados truncados?) >>> >>> No meu caso, eu to fazendo download de mais me milhoes de sequencias, >>> pra isso eu sigo a regra do servidor e peço apenas 500 por vez e limito em >>> 10 fork. >>> >>> Tem outros metodos que posso usar mas acabo perdendo e muito a >>> eficiência. Por isso pretendo testar um benchmark em varias formas >>> diferentes. >>> >>> Bom, sei que existem ferramentas, BioPerl, etc... >>> >>> Abraços, >>> acpguedes >>> _______________________________________________ >>> Rio-pm mailing list >>> Rio-pm em pm.org >>> http://mail.pm.org/mailman/listinfo/rio-pm >> >> _______________________________________________ >> Rio-pm mailing list >> Rio-pm em pm.org >> http://mail.pm.org/mailman/listinfo/rio-pm > > -- > Felipe da Veiga Leprevost, Ph.D. > www.leprevost.com.br > Proteome Bioinformatics Lab > University of Michigan > -- Felipe da Veiga Leprevost, Ph.D. www.leprevost.com.br Proteome Bioinformatics Lab University of Michigan -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From renato.cron em gmail.com Wed May 24 14:57:19 2017 From: renato.cron em gmail.com (Renato Santos) Date: Wed, 24 May 2017 18:57:19 -0300 Subject: [Rio-pm] Metodos de Download em Massa In-Reply-To: References: Message-ID: Recomendo usar qualquer coisa menos forks para fazer downloads. Forks são pesados, geram muitas trocas de contextos desnecessárias para tarefas tão triviais como downloads em paralelo. Se o yada ta complicado, ainda tem o https://metacpan.org/pod/HTTP::Async que com o Future fica uma mão na roda Algo como: use Future; use Future::Utils qw( try_repeat fmap1 ); use IO::Async::Loop; use Net::Async::HTTP; my $loop = IO::Async::Loop->new; my $http = Net::Async::HTTP->new( # serio, é assim q eu uso em produção, com max_connections_per_host=400 max_connections_per_host => 400, timeout => 10 * 60 ); $loop->add($http); sub DO_SOMETHING { my ( $algum_content, $url, $algum_contexto_talvez ) = @_; my $what = $http->do_request( method => 'GET PORT DELETE...', uri => "$url", content_type => 'text/plain', headers => [ 'Content-Type' => 'text/plain' ], content => ( join "\n", @$algum_content ) ); $what = try_repeat { $what } until => sub { eval { $_[0]->get->code == 200 }; }; return $what; } my @futures; for my $url ( 1 ... 100 ) { my $future = DO_SOMETHING( [...], $url, $algum_contexto_talvez )->on_done( sub { my $res = shift; if ( $res->content =~ /401 Unauthorized/ ) { # trata como se fosse erro, por exemplo } else { # ... } } )->on_fail( sub { my $failure = shift; log_error "error: $failure"; } ); push @futures, $future; } my @results = Future->needs_all(@futures)->get; 2017-05-24 16:53 GMT-03:00 Felipe Leprevost : > Apenas como curiosidade Aureliano, de onde você está tentando obter os > arquivos ? > > On Wed, May 24, 2017 at 3:21 PM Felipe da Veiga Leprevost < > felipe em leprevost.com.br> wrote: > >> Apenas como curiosidade Aureliano, de onde você está tentando obter os >> arquivos ? >> >> On Wed, May 24, 2017 at 3:19 PM Aureliano Guedes >> wrote: >> >>> Opa, >>> >>> Yada achei muito complicado pra pouca coisa que vou fazer. Mas to >>> convencido a tentar. >>> >>> Breno, o truncado é por causa que estou fazendo varios downloads com o >>> Parallel::ForkManager de um arquivo no formato texto, onde cada >>> identificador é um dado do arquivo, como eu trabalho com milhoes desses >>> identificadores e o servidor recomenda se limitar a 500 por requisição >>> acaba que tenho que fazer varios downloads. So que to imprimindo tudo em >>> STDOUT e redirecionando a saida pra um aarquivo estilo UNIX mesmo > , então >>> tem varios processo tenetando escrever na tela ao mesmo tempo, eu pensei em >>> fazer um lock mas acho q isso vai fazer demorar. >>> >>> >>> Exatamente aqui é o problema, IPC::ShareTable ou algo assim deve >>> resolver. Alguma sujestão de solução ? >>> >>> >>> my $pm = new Parallel::ForkManager($req); >>> while(my $id = <$IN>){ >>> $cnt++; >>> chomp $id; >>> if ($cnt == $split || $. == $nl){ #$split = 500; >>> push @ids, $id; >>> my @tmp = @ids; >>> undef @ids; >>> $cnt = 0; >>> $pm->start and next; # do the fork >>> my @resp = get_fasta(\@tmp, $db, $timeout); >>> if ($resp[0]){ >>> $resp[1] =~ s/^\s*\n+//mg; >>> print STDOUT $resp[1]; >>> } >>> else{ >>> print STDERR "Status: $resp[2]\n$resp[3]\nDetails: $resp[1]\n"; >>> print STDERR join (" ", "Fail:", @tmp, "\n"); >>> } >>> $pm->finish; #tihs is a fork, at the end (here) the memory will be >>> released >>> } >>> else{ >>> push @ids, $id; >>> } >>> } >>> $pm->wait_all_children; >>> >>> >>> ------------------------------ >>> *From:* Rio-pm on >>> behalf of breno >>> *Sent:* Wednesday, May 24, 2017 3:54:47 AM >>> *To:* Perl Mongers Rio de Janeiro >>> *Subject:* Re: [Rio-pm] Metodos de Download em Massa >>> >>> >>> Oi Aureliano, >>> >>> se você está interessado em benchmarks, pode experimentar o LWP::Curl em >>> vez do Furl, ou se tiver paciência pra ir direto ao metal, Net::Curl ou >>> WWW::Curl. >>> >>> O que quer dizer com "truncado"? Se a conexão cai depois de X bytes >>> baixados (e se vc consegue garantir que o arquivo parcial contém apenas >>> dados válidos), vc pode baixar só o que falta e depois juntar os dois >>> pedaços na mão. Por exemplo, se o arquivo parcial foi baixado em >>> "parcial.tmp": >>> >>> ---------8<--------- >>> my $ua = Furl->new; >>> my $res = $ua->get( 'http://exemplo.com/arquivo.tmp', Range => 'byes=' >>> . -s 'parcial.tmp' . '-'); >>> open my $ fh, '>>', 'parcial.tmp; >>> print $fh, $res->content; >>> close $fh; >>> ---------8<--------- >>> >>> (código não testado, estou no celular) >>> >>> Se o servidor suporta conteúdo parcial (ele responde o primeiro request >>> com Accept-Ranges), isso deve baixar o resto do arquivo. Idealmente, em vez >>> de sobrescever o arquivo parcial, vc junta o conteúdo dos dois em um >>> terceiro arquivo. >>> >>> Finalmente, se quiser baixar vários pedaços do arquivo em paralelo, pode >>> experimentar o HTTP::Range e o LWP::Parallel::UserAgent, ou se inspirar >>> neles e implementar sua própria solução paralela com Furl ou LWP::Curl. >>> >>> []s >>> -b >>> >>> On 23:26, Tue, 23 May 2017 Aureliano Guedes, >>> wrote: >>> >>>> Ola Monges, >>>> >>>> >>>> Gostaria de saber qual metodo vocês mais gostam para fazer downloads em >>>> massa. >>>> >>>> >>>> Eu usava muito LWP, recentemente comecei usar uma combinação de >>>> Parallel::ForkManager e Furl, mas pra meu tipo de dado tem truncado parte >>>> dos download. (vale uma dica pra lidar com dados truncados?) >>>> >>>> No meu caso, eu to fazendo download de mais me milhoes de sequencias, >>>> pra isso eu sigo a regra do servidor e peço apenas 500 por vez e limito em >>>> 10 fork. >>>> >>>> Tem outros metodos que posso usar mas acabo perdendo e muito a >>>> eficiência. Por isso pretendo testar um benchmark em varias formas >>>> diferentes. >>>> >>>> Bom, sei que existem ferramentas, BioPerl, etc... >>>> >>>> Abraços, >>>> acpguedes >>>> _______________________________________________ >>>> Rio-pm mailing list >>>> Rio-pm em pm.org >>>> http://mail.pm.org/mailman/listinfo/rio-pm >>> >>> _______________________________________________ >>> Rio-pm mailing list >>> Rio-pm em pm.org >>> http://mail.pm.org/mailman/listinfo/rio-pm >> >> -- >> Felipe da Veiga Leprevost, Ph.D. >> www.leprevost.com.br >> Proteome Bioinformatics Lab >> University of Michigan >> > -- > Felipe da Veiga Leprevost, Ph.D. > www.leprevost.com.br > Proteome Bioinformatics Lab > University of Michigan > > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm > -- YAGNI, Renato CRON http://www.renatocron.com/blog/ @renato_cron -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From bionica2007-perl em yahoo.com Thu May 25 05:03:03 2017 From: bionica2007-perl em yahoo.com (Nicole Scherer) Date: Thu, 25 May 2017 12:03:03 +0000 (UTC) Subject: [Rio-pm] Metodos de Download em Massa In-Reply-To: References: Message-ID: <1834559497.1804444.1495713783858@mail.yahoo.com> Oi Aureliano, eu teria usado um simples FOR, com rsync ou wget -c, porque normalmente o gargalo é a rede.A decisão por rsync, wget ou curl dependeria do servidor de onde estás baixando as sequências. Já pensaste em usar algum pacote de bioperl do próprio banco de dados? Acho que o NCBI, o BioMart e outros tem pacotes com rotinas específicas.Também tem pacotes de R para TCGA e BioMart (entre outros). Abs,Nicole Em Terça-feira, 23 de Maio de 2017 23:26, Aureliano Guedes escreveu: Ola Monges, Gostaria de saber qual metodo vocês mais gostam para fazer downloads em massa. Eu usava muito LWP, recentemente comecei usar uma combinação de Parallel::ForkManager e Furl, mas pra meu tipo de dado tem truncado parte dos download. (vale uma dica pra lidar com dados truncados?) No meu caso, eu to fazendo download de mais me milhoes de sequencias, pra isso eu sigo a regra do servidor e peço apenas 500 por vez e limito em 10 fork. Tem outros metodos que posso usar mas acabo perdendo e muito a eficiência. Por isso pretendo testar um benchmark em varias formas diferentes. Bom, sei que existem ferramentas, BioPerl, etc... Abraços, acpguedes _______________________________________________ Rio-pm mailing list Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From guedes_1000 em hotmail.com Wed May 24 13:05:34 2017 From: guedes_1000 em hotmail.com (Aureliano Guedes) Date: Wed, 24 May 2017 20:05:34 +0000 Subject: [Rio-pm] Metodos de Download em Massa In-Reply-To: References: , Message-ID: Então, esses no caso to pegando do NCBI. Muita gente vai dizer que tem e-utilities, BioPerl, mas convenhamos que epost, efetch não são muito eficientes para dataset largos, um curl e furl ja baixam mais rápido. BioPerl é dispensável pra pra um simples get. E ja baixei o que precisava, inclusive eu tinha outro script pra essa tarefa, so que agora to usando muitos datasets todos na faixa dos 2-3 milhoes de entradas cada. ________________________________ From: Rio-pm on behalf of Felipe Leprevost Sent: Wednesday, May 24, 2017 7:53:48 PM To: Perl Mongers Rio de Janeiro Subject: Re: [Rio-pm] Metodos de Download em Massa Apenas como curiosidade Aureliano, de onde você está tentando obter os arquivos ? On Wed, May 24, 2017 at 3:21 PM Felipe da Veiga Leprevost > wrote: Apenas como curiosidade Aureliano, de onde você está tentando obter os arquivos ? On Wed, May 24, 2017 at 3:19 PM Aureliano Guedes > wrote: Opa, Yada achei muito complicado pra pouca coisa que vou fazer. Mas to convencido a tentar. Breno, o truncado é por causa que estou fazendo varios downloads com o Parallel::ForkManager de um arquivo no formato texto, onde cada identificador é um dado do arquivo, como eu trabalho com milhoes desses identificadores e o servidor recomenda se limitar a 500 por requisição acaba que tenho que fazer varios downloads. So que to imprimindo tudo em STDOUT e redirecionando a saida pra um aarquivo estilo UNIX mesmo > , então tem varios processo tenetando escrever na tela ao mesmo tempo, eu pensei em fazer um lock mas acho q isso vai fazer demorar. Exatamente aqui é o problema, IPC::ShareTable ou algo assim deve resolver. Alguma sujestão de solução ? my $pm = new Parallel::ForkManager($req); while(my $id = <$IN>){ $cnt++; chomp $id; if ($cnt == $split || $. == $nl){ #$split = 500; push @ids, $id; my @tmp = @ids; undef @ids; $cnt = 0; $pm->start and next; # do the fork my @resp = get_fasta(\@tmp, $db, $timeout); if ($resp[0]){ $resp[1] =~ s/^\s*\n+//mg; print STDOUT $resp[1]; } else{ print STDERR "Status: $resp[2]\n$resp[3]\nDetails: $resp[1]\n"; print STDERR join (" ", "Fail:", @tmp, "\n"); } $pm->finish; #tihs is a fork, at the end (here) the memory will be released } else{ push @ids, $id; } } $pm->wait_all_children; ________________________________ From: Rio-pm > on behalf of breno > Sent: Wednesday, May 24, 2017 3:54:47 AM To: Perl Mongers Rio de Janeiro Subject: Re: [Rio-pm] Metodos de Download em Massa Oi Aureliano, se você está interessado em benchmarks, pode experimentar o LWP::Curl em vez do Furl, ou se tiver paciência pra ir direto ao metal, Net::Curl ou WWW::Curl. O que quer dizer com "truncado"? Se a conexão cai depois de X bytes baixados (e se vc consegue garantir que o arquivo parcial contém apenas dados válidos), vc pode baixar só o que falta e depois juntar os dois pedaços na mão. Por exemplo, se o arquivo parcial foi baixado em "parcial.tmp": ---------8<--------- my $ua = Furl->new; my $res = $ua->get( 'http://exemplo.com/arquivo.tmp', Range => 'byes=' . -s 'parcial.tmp' . '-'); open my $ fh, '>>', 'parcial.tmp; print $fh, $res->content; close $fh; ---------8<--------- (código não testado, estou no celular) Se o servidor suporta conteúdo parcial (ele responde o primeiro request com Accept-Ranges), isso deve baixar o resto do arquivo. Idealmente, em vez de sobrescever o arquivo parcial, vc junta o conteúdo dos dois em um terceiro arquivo. Finalmente, se quiser baixar vários pedaços do arquivo em paralelo, pode experimentar o HTTP::Range e o LWP::Parallel::UserAgent, ou se inspirar neles e implementar sua própria solução paralela com Furl ou LWP::Curl. []s -b On 23:26, Tue, 23 May 2017 Aureliano Guedes, > wrote: Ola Monges, Gostaria de saber qual metodo vocês mais gostam para fazer downloads em massa. Eu usava muito LWP, recentemente comecei usar uma combinação de Parallel::ForkManager e Furl, mas pra meu tipo de dado tem truncado parte dos download. (vale uma dica pra lidar com dados truncados?) No meu caso, eu to fazendo download de mais me milhoes de sequencias, pra isso eu sigo a regra do servidor e peço apenas 500 por vez e limito em 10 fork. Tem outros metodos que posso usar mas acabo perdendo e muito a eficiência. Por isso pretendo testar um benchmark em varias formas diferentes. Bom, sei que existem ferramentas, BioPerl, etc... Abraços, acpguedes _______________________________________________ Rio-pm mailing list Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm _______________________________________________ Rio-pm mailing list Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm -- Felipe da Veiga Leprevost, Ph.D. www.leprevost.com.br Proteome Bioinformatics Lab University of Michigan -- Felipe da Veiga Leprevost, Ph.D. www.leprevost.com.br Proteome Bioinformatics Lab University of Michigan -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From guedes_1000 em hotmail.com Thu May 25 06:12:04 2017 From: guedes_1000 em hotmail.com (Aureliano Guedes) Date: Thu, 25 May 2017 13:12:04 +0000 Subject: [Rio-pm] Metodos de Download em Massa In-Reply-To: References: , Message-ID: Gostei desse Future. Talvez possa usar como alternativa para IPC::ShareTables em algumas situações. Quanto ao Fork, eu passei muito tempo na sombra quanto ao assunto de threads, forks, parallel, async, queue, ..., vejo muitas pessoas com posições diferentes mas a maioria fala pra evitar threads por exemplo, eu mesmo nunca usava nada por causa das diversas opnões (e infelizmente computação não é minha principal expertize), mas eu aprendi que tudo depende. No caso do meu script, eu uso fork pra fazer varios downoads, é uma atividade simples na maioria das vezes, e no final se você acompanha os processos (pai e filhos), o consumo de memoria e CPU é praticamente 0 cada (juro, mem = 0, cpu <= 0.7), então o máximo que pesa nesse caso é o número de PIDs que o sistema vai gerenciar. Devo ta falando muita besteira, mas continuando, o problema que eu vejo em fork nesse caso é imprimir o download. Nesse caso é um problema de pós processamento, que pode ser resolvido linearmente, gerando temp files pra cada download depois unindo tudo seria uma solução. Minha pergunta nesses casos é: "quanto essa etapa influência no desempenho total do programa?". Por exemplo, eu tenho uma aplicação que simplismente faz wraper que encapsula um outro programa de bioinfo, é um programa que mesmo você pedindo pra usar 8 cpu demora (dependendo do dataset) 20h pra terminar, eu não me importo em um servidor criar 40 maquinas virtuais com 8 cpu cada e paralelizar com fork mesmo todos os processos filhos e terminar tudo em 30 minutos mesmo que pese. Claro que depende de recursos computacionais tbm. No final não é so custo, mas benefício tambem. Especificamente no caso desse downloader não é necessidade, é mais o caso de criar opções e explorar possibilidades, pois tenho outros downloaders que resolvem meu problema, so que esse é o primeiro que devide e paraleliza os processos. ________________________________ From: Rio-pm on behalf of Renato Santos Sent: Wednesday, May 24, 2017 9:57:19 PM To: Perl Mongers Rio de Janeiro Subject: Re: [Rio-pm] Metodos de Download em Massa Recomendo usar qualquer coisa menos forks para fazer downloads. Forks são pesados, geram muitas trocas de contextos desnecessárias para tarefas tão triviais como downloads em paralelo. Se o yada ta complicado, ainda tem o https://metacpan.org/pod/HTTP::Async que com o Future fica uma mão na roda Algo como: use Future; use Future::Utils qw( try_repeat fmap1 ); use IO::Async::Loop; use Net::Async::HTTP; my $loop = IO::Async::Loop->new; my $http = Net::Async::HTTP->new( # serio, é assim q eu uso em produção, com max_connections_per_host=400 max_connections_per_host => 400, timeout => 10 * 60 ); $loop->add($http); sub DO_SOMETHING { my ( $algum_content, $url, $algum_contexto_talvez ) = @_; my $what = $http->do_request( method => 'GET PORT DELETE...', uri => "$url", content_type => 'text/plain', headers => [ 'Content-Type' => 'text/plain' ], content => ( join "\n", @$algum_content ) ); $what = try_repeat { $what } until => sub { eval { $_[0]->get->code == 200 }; }; return $what; } my @futures; for my $url ( 1 ... 100 ) { my $future = DO_SOMETHING( [...], $url, $algum_contexto_talvez )->on_done( sub { my $res = shift; if ( $res->content =~ /401 Unauthorized/ ) { # trata como se fosse erro, por exemplo } else { # ... } } )->on_fail( sub { my $failure = shift; log_error "error: $failure"; } ); push @futures, $future; } my @results = Future->needs_all(@futures)->get; 2017-05-24 16:53 GMT-03:00 Felipe Leprevost >: Apenas como curiosidade Aureliano, de onde você está tentando obter os arquivos ? On Wed, May 24, 2017 at 3:21 PM Felipe da Veiga Leprevost > wrote: Apenas como curiosidade Aureliano, de onde você está tentando obter os arquivos ? On Wed, May 24, 2017 at 3:19 PM Aureliano Guedes > wrote: Opa, Yada achei muito complicado pra pouca coisa que vou fazer. Mas to convencido a tentar. Breno, o truncado é por causa que estou fazendo varios downloads com o Parallel::ForkManager de um arquivo no formato texto, onde cada identificador é um dado do arquivo, como eu trabalho com milhoes desses identificadores e o servidor recomenda se limitar a 500 por requisição acaba que tenho que fazer varios downloads. So que to imprimindo tudo em STDOUT e redirecionando a saida pra um aarquivo estilo UNIX mesmo > , então tem varios processo tenetando escrever na tela ao mesmo tempo, eu pensei em fazer um lock mas acho q isso vai fazer demorar. Exatamente aqui é o problema, IPC::ShareTable ou algo assim deve resolver. Alguma sujestão de solução ? my $pm = new Parallel::ForkManager($req); while(my $id = <$IN>){ $cnt++; chomp $id; if ($cnt == $split || $. == $nl){ #$split = 500; push @ids, $id; my @tmp = @ids; undef @ids; $cnt = 0; $pm->start and next; # do the fork my @resp = get_fasta(\@tmp, $db, $timeout); if ($resp[0]){ $resp[1] =~ s/^\s*\n+//mg; print STDOUT $resp[1]; } else{ print STDERR "Status: $resp[2]\n$resp[3]\nDetails: $resp[1]\n"; print STDERR join (" ", "Fail:", @tmp, "\n"); } $pm->finish; #tihs is a fork, at the end (here) the memory will be released } else{ push @ids, $id; } } $pm->wait_all_children; ________________________________ From: Rio-pm > on behalf of breno > Sent: Wednesday, May 24, 2017 3:54:47 AM To: Perl Mongers Rio de Janeiro Subject: Re: [Rio-pm] Metodos de Download em Massa Oi Aureliano, se você está interessado em benchmarks, pode experimentar o LWP::Curl em vez do Furl, ou se tiver paciência pra ir direto ao metal, Net::Curl ou WWW::Curl. O que quer dizer com "truncado"? Se a conexão cai depois de X bytes baixados (e se vc consegue garantir que o arquivo parcial contém apenas dados válidos), vc pode baixar só o que falta e depois juntar os dois pedaços na mão. Por exemplo, se o arquivo parcial foi baixado em "parcial.tmp": ---------8<--------- my $ua = Furl->new; my $res = $ua->get( 'http://exemplo.com/arquivo.tmp', Range => 'byes=' . -s 'parcial.tmp' . '-'); open my $ fh, '>>', 'parcial.tmp; print $fh, $res->content; close $fh; ---------8<--------- (código não testado, estou no celular) Se o servidor suporta conteúdo parcial (ele responde o primeiro request com Accept-Ranges), isso deve baixar o resto do arquivo. Idealmente, em vez de sobrescever o arquivo parcial, vc junta o conteúdo dos dois em um terceiro arquivo. Finalmente, se quiser baixar vários pedaços do arquivo em paralelo, pode experimentar o HTTP::Range e o LWP::Parallel::UserAgent, ou se inspirar neles e implementar sua própria solução paralela com Furl ou LWP::Curl. []s -b On 23:26, Tue, 23 May 2017 Aureliano Guedes, > wrote: Ola Monges, Gostaria de saber qual metodo vocês mais gostam para fazer downloads em massa. Eu usava muito LWP, recentemente comecei usar uma combinação de Parallel::ForkManager e Furl, mas pra meu tipo de dado tem truncado parte dos download. (vale uma dica pra lidar com dados truncados?) No meu caso, eu to fazendo download de mais me milhoes de sequencias, pra isso eu sigo a regra do servidor e peço apenas 500 por vez e limito em 10 fork. Tem outros metodos que posso usar mas acabo perdendo e muito a eficiência. Por isso pretendo testar um benchmark em varias formas diferentes. Bom, sei que existem ferramentas, BioPerl, etc... Abraços, acpguedes _______________________________________________ Rio-pm mailing list Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm _______________________________________________ Rio-pm mailing list Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm -- Felipe da Veiga Leprevost, Ph.D. www.leprevost.com.br Proteome Bioinformatics Lab University of Michigan -- Felipe da Veiga Leprevost, Ph.D. www.leprevost.com.br Proteome Bioinformatics Lab University of Michigan _______________________________________________ Rio-pm mailing list Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm -- YAGNI, Renato CRON http://www.renatocron.com/blog/ @renato_cron -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From bionica2007-perl em yahoo.com Wed Jun 28 08:07:36 2017 From: bionica2007-perl em yahoo.com (Nicole Scherer) Date: Wed, 28 Jun 2017 15:07:36 +0000 (UTC) Subject: [Rio-pm] aprendendo ao corrigir provas References: <1047464234.420385.1498662456934.ref@mail.yahoo.com> Message-ID: <1047464234.420385.1498662456934@mail.yahoo.com> Olá Monges! Estou chocada!Acabei de descobrir que alterar o valor de $item dentro de um loop  foreach my $item (@vetor){ }  altera o valor do elemento do array!Como é que eu nunca tinha percebido isto?Quando leio os scripts dos alunos, sempre aprendo uma maneira inusitada de resolver uma questão. Mas esta contradiz uma certeza que eu tinha... #LETRA d) da Questão 01 - TROCAR T por U na Sequencia                                                                                   my @nucls = split(//, $dna); foreach my $item(@nucls) {     print "@nucls\n";     if($item eq "T") {         $item = "U";     }     if($item eq "t") {         $item = "u";     } } my $seq = uc(join("", @nucls)); E a sequencia realmente foi modificada!Na minha concepção, a variável $item recebia o valor de cada elemento do array, mas ocupava um endereço diferente. Mas assim, me parece que ela não passa de uma referência.Está certo isto? []s,Nicole -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From gabriel.vieira em gmail.com Wed Jun 28 08:33:46 2017 From: gabriel.vieira em gmail.com (Gabriel Vieira) Date: Wed, 28 Jun 2017 11:33:46 -0400 Subject: [Rio-pm] aprendendo ao corrigir provas In-Reply-To: <1047464234.420385.1498662456934@mail.yahoo.com> References: <1047464234.420385.1498662456934.ref@mail.yahoo.com> <1047464234.420385.1498662456934@mail.yahoo.com> Message-ID: Olá Nicole, Está sim. A depender do valor de cada item, claro. Isso é bem interessante aliás. If any element of LIST is an lvalue, you can modify it by modifying VAR inside the loop. Conversely, if any element of LIST is NOT an lvalue, any attempt to modify that element will fail. *In other words, the foreach loop index variable is an implicit alias for each item in the list that you're looping over.* Segue a referência da documentação: http://perldoc.perl.org/perlsyn.html#For-Loops 2017-06-28 11:07 GMT-04:00 Nicole Scherer : > Olá Monges! > > Estou chocada! > Acabei de descobrir que alterar o valor de $item dentro de um loop > foreach my $item (@vetor){ } altera o valor do elemento do array! > Como é que eu nunca tinha percebido isto? > Quando leio os scripts dos alunos, sempre aprendo uma maneira inusitada de > resolver uma questão. Mas esta contradiz uma certeza que eu tinha... > > #LETRA d) da Questão 01 - TROCAR T por U na Sequencia > > my @nucls = split(//, $dna); > > foreach my $item(@nucls) { > print "@nucls\n"; > if($item eq "T") { > $item = "U"; > } > if($item eq "t") { > $item = "u"; > } > } > my $seq = uc(join("", @nucls)); > > E a sequencia realmente foi modificada! > Na minha concepção, a variável $item recebia o valor de cada elemento do > array, mas ocupava um endereço diferente. > Mas assim, me parece que ela não passa de uma referência. > Está certo isto? > > []s, > Nicole > > > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm > -- Gabriel Vieira -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From bionica2007-perl em yahoo.com Wed Jun 28 09:03:27 2017 From: bionica2007-perl em yahoo.com (Nicole Scherer) Date: Wed, 28 Jun 2017 16:03:27 +0000 (UTC) Subject: [Rio-pm] aprendendo ao corrigir provas In-Reply-To: References: <1047464234.420385.1498662456934.ref@mail.yahoo.com> <1047464234.420385.1498662456934@mail.yahoo.com> Message-ID: <39100233.481828.1498665807379@mail.yahoo.com> Ai caramba!E eu vinha usando isso indiscriminadamente, sem pensar nas consequências!Oh!Mas acho que não cheguei a causar nenhuma catástrofe...btw, o que é um lvalue ? Em Quarta-feira, 28 de Junho de 2017 12:34, Gabriel Vieira escreveu: Olá Nicole, Está sim. A depender do valor de cada item, claro. Isso é bem interessante aliás. If any element of LIST is an lvalue, you can modify it by modifying VAR inside the loop. Conversely, if any element of LIST is NOT an lvalue, any attempt to modify that element will fail. In other words, the foreach loop index variable is an implicit alias for each item in the list that you're looping over. Segue a referência da documentação: http://perldoc.perl.org/perlsyn.html#For-Loops 2017-06-28 11:07 GMT-04:00 Nicole Scherer : Olá Monges! Estou chocada!Acabei de descobrir que alterar o valor de $item dentro de um loop  foreach my $item (@vetor){ }  altera o valor do elemento do array!Como é que eu nunca tinha percebido isto?Quando leio os scripts dos alunos, sempre aprendo uma maneira inusitada de resolver uma questão. Mas esta contradiz uma certeza que eu tinha... #LETRA d) da Questão 01 - TROCAR T por U na Sequencia                                                                                      my @nucls = split(//, $dna); foreach my $item(@nucls) {     print "@nucls\n";     if($item eq "T") {         $item = "U";     }     if($item eq "t") {         $item = "u";     } } my $seq = uc(join("", @nucls)); E a sequencia realmente foi modificada!Na minha concepção, a variável $item recebia o valor de cada elemento do array, mas ocupava um endereço diferente. Mas assim, me parece que ela não passa de uma referência.Está certo isto? []s,Nicole ______________________________ _________________ Rio-pm mailing list Rio-pm em pm.org http://mail.pm.org/mailman/ listinfo/rio-pm -- Gabriel Vieira -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From gabriel.vieira em gmail.com Wed Jun 28 09:20:43 2017 From: gabriel.vieira em gmail.com (Gabriel Vieira) Date: Wed, 28 Jun 2017 12:20:43 -0400 Subject: [Rio-pm] aprendendo ao corrigir provas In-Reply-To: <39100233.481828.1498665807379@mail.yahoo.com> References: <1047464234.420385.1498662456934.ref@mail.yahoo.com> <1047464234.420385.1498662456934@mail.yahoo.com> <39100233.481828.1498665807379@mail.yahoo.com> Message-ID: Hehe espero que não tenha atrasado na descoberta de nenhuma cura :) O lvalue (*left*value) se dá pela atribuição de um valor ao endereço de memória referenciado no lado esquerdo da expressão. Como exemplo: my $foo = "bar"; # bar é o novo valor do endereço de memória ao qual $foo faz referência. E pode ser usado em subrotinas também como: my $foo = 5; sub foo : lvalue { $foo } foo = 3; print foo.$/; # imprime 3 2017-06-28 12:03 GMT-04:00 Nicole Scherer : > Ai caramba! > E eu vinha usando isso indiscriminadamente, sem pensar nas consequências! > Oh! > Mas acho que não cheguei a causar nenhuma catástrofe... > btw, o que é um lvalue ? > > > Em Quarta-feira, 28 de Junho de 2017 12:34, Gabriel Vieira < > gabriel.vieira em gmail.com> escreveu: > > > Olá Nicole, > > Está sim. A depender do valor de cada item, claro. Isso é bem interessante > aliás. > > If any element of LIST is an lvalue, you can modify it by modifying VAR > inside the loop. Conversely, if any element of LIST is NOT an lvalue, any > attempt to modify that element will fail. *In other words, the foreach > loop index variable is an implicit alias for each item in the list that > you're looping over.* > > Segue a referência da documentação: http://perldoc. > perl.org/perlsyn.html#For-Loops > > 2017-06-28 11:07 GMT-04:00 Nicole Scherer : > > Olá Monges! > > Estou chocada! > Acabei de descobrir que alterar o valor de $item dentro de um loop > foreach my $item (@vetor){ } altera o valor do elemento do array! > Como é que eu nunca tinha percebido isto? > Quando leio os scripts dos alunos, sempre aprendo uma maneira inusitada de > resolver uma questão. Mas esta contradiz uma certeza que eu tinha... > > #LETRA d) da Questão 01 - TROCAR T por U na Sequencia > > my @nucls = split(//, $dna); > > foreach my $item(@nucls) { > print "@nucls\n"; > if($item eq "T") { > $item = "U"; > } > if($item eq "t") { > $item = "u"; > } > } > my $seq = uc(join("", @nucls)); > > E a sequencia realmente foi modificada! > Na minha concepção, a variável $item recebia o valor de cada elemento do > array, mas ocupava um endereço diferente. > Mas assim, me parece que ela não passa de uma referência. > Está certo isto? > > []s, > Nicole > > > ______________________________ _________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/ listinfo/rio-pm > > > > > > -- > Gabriel Vieira > > > > _______________________________________________ > Rio-pm mailing list > Rio-pm em pm.org > http://mail.pm.org/mailman/listinfo/rio-pm > -- Gabriel Vieira -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From jimmy.tty em gmail.com Wed Jun 28 11:40:57 2017 From: jimmy.tty em gmail.com (jimmy) Date: Wed, 28 Jun 2017 15:40:57 -0300 Subject: [Rio-pm] aprendendo ao corrigir provas In-Reply-To: References: <1047464234.420385.1498662456934.ref@mail.yahoo.com> <1047464234.420385.1498662456934@mail.yahoo.com> Message-ID: <20170628184057.GA12333@textmode> Saudações Nicole, On Wed, Jun 28, 2017 at 11:33:46AM -0400, Gabriel Vieira wrote: > 2017-06-28 11:07 GMT-04:00 Nicole Scherer : > > Olá Monges! > Estou chocada! > Acabei de descobrir que alterar o valor de $item dentro de um loop foreach > my $item (@vetor){ } altera o valor do elemento do array! > Como é que eu nunca tinha percebido isto? > Quando leio os scripts dos alunos, sempre aprendo uma maneira inusitada de > resolver uma questão. Mas esta contradiz uma certeza que eu tinha... > #LETRA d) da Questão 01 - TROCAR T por U na > Sequencia > my @nucls = split(//, $dna); > > foreach my $item(@nucls) { > print "@nucls\n"; > if($item eq "T") { > $item = "U"; > } > if($item eq "t") { > $item = "u"; > } > } > my $seq = uc(join("", @nucls)); > E a sequencia realmente foi modificada! > Na minha concepção, a variável $item recebia o valor de cada elemento do > array, mas ocupava um endereço diferente. O Gabriel Vieira já explicou e vou fazer apenas fazer algumas especulações: 1. Você está acostumada a usar: foreach my $item ( split //, $dna ) {...} Este caso não se encaixa na explicação porque LIST, neste caso, não possui "lvalues". 2. Você não costuma usar 'foreach my $item' sobre um ARRAY e sim outras formas de looping. > Mas assim, me parece que ela não passa de uma referência. Não ficou claro (para mim), mas acho que aqui, "referência" não é a que o Perl entende por referência, correto? De qualquer forma... para ter certeza, poderíamos utilizar o bultin "ref", por exemplo, e conferirmos se a saída seria diferente de "empty string". > Está certo isto? > []s, > Nicole