Ich habe nur puf (Parallel URL Fetcher) gefunden, konnte aber keine URLs aus einer Datei lesen. etwas wie
puf < urls.txt
geht auch nicht.
Das auf dem Server installierte Betriebssystem ist Ubuntu.
Ich habe nur puf (Parallel URL Fetcher) gefunden, konnte aber keine URLs aus einer Datei lesen. etwas wie
puf < urls.txt
geht auch nicht.
Das auf dem Server installierte Betriebssystem ist Ubuntu.
Antworten:
Mit GNU Parallel ,
$ parallel -j $ {jobs} wget <urls.txt
oder xargs
von GNU Findutils ,
$ xargs -n 1 -P $ {jobs} wget <urls.txt
wo ${jobs}
ist die maximale Anzahl von wget
Ihnen gleichzeitig ausgeführt zulassen möchten (Einstellung -n
auf 1
einen bekommen wget
Aufruf pro Zeile in urls.txt
). Ohne -j
/ -P
, parallel
wird so viele Arbeitsplätze in einer Zeit , als CPU - Kern läuft (was nicht notwendigerweise Sinn für macht wget
durch Netzwerk - IO gebunden), und xargs
wird einen nach dem anderen ausgeführt werden .
Eine nette Funktion, parallel
die vorbei xargs
ist, ist, die Ausgabe der gleichzeitig ausgeführten Jobs getrennt zu halten, aber wenn Sie sich nicht darum kümmern, xargs
ist es wahrscheinlicher, dass sie vorinstalliert ist.
jobs
hängt von vielen Faktoren ab:
Das macht aria2.
http://sourceforge.net/apps/trac/aria2/wiki/UsageExample#Downloadfileslistedinafileconcurrently
Beispiel: aria2c http://example.org/mylinux.iso
Sie können dies mit Python und der Pycurl-Bibliothek implementieren. Die Pycurl-Bibliothek verfügt über die "Multi" -Schnittstelle, die eine eigene gerade Schleife implementiert, die mehrere gleichzeitige Verbindungen ermöglicht.
Das Interface ist jedoch eher C-artig und daher etwas umständlich im Vergleich zu anderem, eher "Pythonic" -Code.
Ich habe einen Wrapper dafür geschrieben, der einen vollständigeren browserähnlichen Client darauf aufbaut. Sie können dies als Beispiel verwenden. Siehe das Modul pycopia.WWW.client . Der HTTPConnectionManager umschließt die Multi-Schnittstelle.
Dies funktioniert und funktioniert nicht mit lokalem oder entferntem DoS, wenn die richtigen Einstellungen vorgenommen werden:
(bandwidth=5000 jobs=8; \
parallel \
--round \
-P $jobs \
--nice +5 \
--delay 2 \
--pipepart \
--cat \
-a urls.txt \
wget \
--limit-rate=$((bandwidth/jobs))k \
-w 1 \
-nv \
-i {} \
)
Ein Teil der Manpage von GNU Parallel enthält ein Beispiel für ein paralleles rekursives wget.
https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Breadth-first-parallel-web-crawler-mirrorer
HTML wird zweimal heruntergeladen: Einmal zum Extrahieren von Links und einmal zum Herunterladen auf die Festplatte. Andere Inhalte werden nur einmal heruntergeladen.
Wenn Sie die Antwort des Kurzlebigen nicht benötigen, liegt es auf der Hand.
Die Opfer Ihres Paralell-Downloads werden sich nicht amüsieren: Sie erwarten, dass eine Verbindung für jeden Client bereitgestellt wird, und das Einrichten mehrerer Verbindungen bedeutet insgesamt weniger Clients. (Dh dies wird als unhöfliches Verhalten angesehen).