Ho trovato solo puf (Parallel URL fetcher) ma non sono riuscito a farlo leggere gli URL da un file; qualcosa di simile a
puf < urls.txt
non funziona neanche.
Il sistema operativo installato sul server è Ubuntu.
Ho trovato solo puf (Parallel URL fetcher) ma non sono riuscito a farlo leggere gli URL da un file; qualcosa di simile a
puf < urls.txt
non funziona neanche.
Il sistema operativo installato sul server è Ubuntu.
Risposte:
Usando GNU Parallel ,
$ parallel -j $ {jobs} wget <urls.txt
o xargs
da GNU Findutils ,
$ xargs -n 1 -P $ {jobs} wget <urls.txt
dove ${jobs}
è il numero massimo di wget
si desidera consentire per l'esecuzione simultanea (impostazione -n
per 1
ottenere wget
un'invocazione per riga in urls.txt
). Senza -j
/ -P
, parallel
eseguirà tutti i lavori alla volta quanti i core della CPU (che non ha necessariamente senso per il wget
vincolo dall'IO della rete) e xargs
verrà eseguito uno alla volta.
Una bella funzionalità che parallel
ha superato xargs
è quella di mantenere separato l'output dei lavori in esecuzione contemporaneamente, ma se non ti interessa, xargs
è più probabile che sia preinstallato.
jobs
dipende da molti fattori: latenza del percorso, larghezza di banda del percorso, criteri del server remoto, ecc.
aria2 fa questo.
http://sourceforge.net/apps/trac/aria2/wiki/UsageExample#Downloadfileslistedinafileconcurrently
Esempio: aria2c http://example.org/mylinux.iso
Puoi implementarlo usando Python e la libreria pycurl. La libreria pycurl ha l'interfaccia "multi" che implementa il proprio ciclo uniforme che consente connessioni multiple simultanee.
Tuttavia l'interfaccia è piuttosto simile a C e quindi un po 'ingombrante rispetto ad altri, più "Pythonic", codice.
Ho scritto un wrapper per esso che crea un client simile a un browser più completo. Puoi usarlo come esempio. Vedi il modulo pycopia.WWW.client . HTTPConnectionManager esegue il wrapping dell'interfaccia multipla.
Parte della pagina man di GNU Parallel contiene un esempio di wget ricorsivo parallelo.
https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Breadth-first-parallel-web-crawler-mirrorer
L'HTML viene scaricato due volte: una volta per estrarre i collegamenti e una volta per il download su disco. Gli altri contenuti vengono scaricati solo una volta.
Se non hai bisogno della ricorsività, la risposta effimera sembra ovvia.
Le vittime del download di Paralell non si divertiranno: si aspettano una connessione per servire ciascun client, la creazione di più connessioni significa meno client in generale. (Cioè, questo è considerato un comportamento scortese).