Encontrei apenas puf (Buscador de URLs paralelo), mas não consegui ler URLs de um arquivo; algo como
puf < urls.txt
também não funciona.
O sistema operacional instalado no servidor é o Ubuntu.
Encontrei apenas puf (Buscador de URLs paralelo), mas não consegui ler URLs de um arquivo; algo como
puf < urls.txt
também não funciona.
O sistema operacional instalado no servidor é o Ubuntu.
Respostas:
Usando o GNU Parallel ,
$ parallel -j $ {jobs} wget <urls.txt
ou xargs
do GNU Findutils ,
$ xargs -n 1 -P $ {jobs} wget <urls.txt
onde ${jobs}
é o número máximo de wget
você deseja permitir a execução simultânea (ajuste -n
para 1
obter uma wget
invocação por linha no urls.txt
). Sem -j
/ -P
, parallel
executará tantos trabalhos por vez quanto os núcleos da CPU (o que não necessariamente faz sentido para o wget
IO da rede) e xargs
será executado um de cada vez.
Um recurso interessante parallel
acabou xargs
mantendo a saída dos trabalhos em execução simultânea separados, mas se você não se importa com isso, xargs
é mais provável que esteja pré-instalado.
jobs
depende de muitos fatores: latência do caminho, largura de banda do caminho, políticas de servidor remoto etc.
aria2 faz isso.
http://sourceforge.net/apps/trac/aria2/wiki/UsageExample#Downloadfileslistedinafilconcurrently
Exemplo: aria2c http://example.org/mylinux.iso
Você pode implementar isso usando Python e a biblioteca pycurl. A biblioteca pycurl possui a interface "multi" que implementa seu próprio loop par que permite várias conexões simultâneas.
No entanto, a interface é parecida com C e, portanto, um pouco complicada em comparação com outro código, mais "Pythonic".
Eu escrevi um wrapper para ele que cria um cliente mais completo, semelhante a um navegador, sobre ele. Você pode usar isso como um exemplo. Veja o módulo pycopia.WWW.client . O HTTPConnectionManager envolve a multi interface.
Parte da página de manual do GNU Parallel contém um exemplo de wget recursivo paralelo.
https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Breadth-first-parallel-web-crawler-mirrorer
O HTML é baixado duas vezes: uma vez para extrair links e uma vez para baixar no disco. Outro conteúdo é baixado apenas uma vez.
Se você não precisa da resposta do epemiente recursivo, parece óbvio.
As vítimas do seu download paralelo não serão divertidas: elas esperam que uma conexão atenda a cada cliente; configurar várias conexões significa menos clientes em geral. (Ou seja, isso é considerado comportamento rude).