<div dir="ltr"><span style="color:rgb(33,33,33)">Apenas como curiosidade Aureliano, de onde você está tentando obter os arquivos ?</span><br><br><div class="gmail_quote"><div dir="ltr">On Wed, May 24, 2017 at 3:21 PM Felipe da Veiga Leprevost <<a href="mailto:felipe@leprevost.com.br">felipe@leprevost.com.br</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Apenas como curiosidade Aureliano, de onde você está tentando obter os arquivos ?</div><br><div class="gmail_quote"><div dir="ltr">On Wed, May 24, 2017 at 3:19 PM Aureliano Guedes <<a href="mailto:guedes_1000@hotmail.com" target="_blank">guedes_1000@hotmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div>

<div id="m_-4939435173408687090m_-3800307471242624176divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif" dir="ltr">
<p>Opa,<br>
<br>
Yada achei muito complicado pra pouca coisa que vou fazer. Mas to convencido a tentar.<br>
<br>
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.</p>
<p><br>
</p>
<p>Exatamente aqui é o problema, IPC::ShareTable ou algo assim deve resolver. Alguma sujestão de solução ?</p>
<p><br>
</p>
<div>my $pm = new Parallel::ForkManager($req);</div>
<div>while(my $id = <$IN>){</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>$cnt++;</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>chomp $id;</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>if ($cnt == $split || $. == $nl){ #$split = 500; </div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>push @ids, $id;</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>my @tmp = @ids;</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>undef @ids;</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>$cnt = 0;</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="font-size:12pt;white-space:pre-wrap"></span><span style="font-size:12pt">$pm->start and next; # do the fork</span><br>
</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="font-size:12pt;white-space:pre-wrap"></span><span style="font-size:12pt">my @resp = get_fasta(\@tmp, $db, $timeout); </span><br>
</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>if ($resp[0]){</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>$resp[1] =~ s/^\s*\n+//mg;</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>print STDOUT $resp[1];</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="font-size:12pt;white-space:pre-wrap"></span><span style="font-size:12pt">}</span><br>
</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>else{</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>print STDERR "Status: $resp[2]\n$resp[3]\nDetails: $resp[1]\n";</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="font-size:12pt;white-space:pre-wrap"></span><span style="font-size:12pt">print STDERR join (" ", "Fail:", @tmp, "\n");</span><br>
</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>}</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>$pm->finish; #tihs is a fork, at the end (here) the memory will be released </div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>}</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>else{</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>push @ids, $id;</div>
<div><span class="m_-4939435173408687090m_-3800307471242624176Apple-tab-span" style="white-space:pre-wrap"></span>}</div>
<div>} </div>
<div>$pm->wait_all_children;</div>
<br>
<br>
<p></p>
</div>
<hr style="display:inline-block;width:98%">
<div id="m_-4939435173408687090m_-3800307471242624176divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Rio-pm <rio-pm-bounces+guedes_1000=<a href="mailto:hotmail.com@pm.org" target="_blank">hotmail.com@pm.org</a>> on behalf of breno <<a href="mailto:oainikusama@gmail.com" target="_blank">oainikusama@gmail.com</a>><br>
<b>Sent:</b> Wednesday, May 24, 2017 3:54:47 AM<br>
<b>To:</b> Perl Mongers Rio de Janeiro<br>
<b>Subject:</b> Re: [Rio-pm] Metodos de Download em Massa</font>
<div> </div>
</div>
<div>
<p dir="ltr">Oi Aureliano,</p>
<p dir="ltr">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.</p>
<p dir="ltr">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":</p>
<p dir="ltr">---------8<---------<br>
my $ua = Furl->new;<br>
my $res = $ua->get( '<a href="http://exemplo.com/arquivo.tmp" target="_blank">http://exemplo.com/arquivo.tmp</a>', Range => 'byes=' . -s 'parcial.tmp' . '-');<br>
open my $ fh, '>>', 'parcial.tmp;<br>
print $fh, $res->content;<br>
close $fh;<br>
---------8<---------</p>
<p dir="ltr">(código não testado, estou no celular)</p>
<p dir="ltr">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.</p>
<p dir="ltr">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.</p>
<p dir="ltr">[]s<br>
-b</p>
<br>
<div class="gmail_quote">
<div dir="ltr">On 23:26, Tue, 23 May 2017 Aureliano Guedes, <<a href="mailto:guedes_1000@hotmail.com" target="_blank">guedes_1000@hotmail.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div id="m_-4939435173408687090m_-3800307471242624176m_9146569206389881045divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif" dir="ltr">
<p>Ola Monges,</p>
<p><br>
</p>
<p>Gostaria de saber qual metodo vocês mais gostam para fazer downloads em massa.<br>
</p>
<p><br>
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?)
<br>
<br>
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.<br>
<br>
Tem outros metodos que posso usar mas acabo perdendo e muito a eficiência. Por isso pretendo testar um benchmark em varias formas diferentes.<br>
<br>
Bom, sei que existem ferramentas, BioPerl, etc... <br>
<br>
Abraços,<br>
acpguedes<br>
</p>
</div>
</div>
_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" rel="noreferrer" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a></blockquote>
</div>
</div>
</div>

_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" rel="noreferrer" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a></blockquote></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr"><div class="m_-4939435173408687090gmail_signature"><div dir="ltr"><div dir="ltr"><div dir="ltr"><span>Felipe da Veiga Leprevost, Ph.D.</span><div><span><a>www.leprevost.com.br</a><br></span><div><span>Proteome Bioinformatics Lab</span></div><div><span>University of Michigan</span></div></div></div></div></div></div></div></div></blockquote></div></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr"><div class="gmail_signature"><div dir="ltr"><div dir="ltr"><div dir="ltr"><span>Felipe da Veiga Leprevost, Ph.D.</span><div><span><a>www.leprevost.com.br</a><br></span><div><span>Proteome Bioinformatics Lab</span></div><div><span>University of Michigan</span></div></div></div></div></div></div></div></div>