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 xargsvon GNU Findutils ,
$ xargs -n 1 -P $ {jobs} wget <urls.txt
wo ${jobs}ist die maximale Anzahl von wgetIhnen gleichzeitig ausgeführt zulassen möchten (Einstellung -nauf 1einen bekommen wgetAufruf pro Zeile in urls.txt). Ohne -j/ -P, parallelwird so viele Arbeitsplätze in einer Zeit , als CPU - Kern läuft (was nicht notwendigerweise Sinn für macht wgetdurch Netzwerk - IO gebunden), und xargswird einen nach dem anderen ausgeführt werden .
Eine nette Funktion, paralleldie vorbei xargsist, ist, die Ausgabe der gleichzeitig ausgeführten Jobs getrennt zu halten, aber wenn Sie sich nicht darum kümmern, xargsist es wahrscheinlicher, dass sie vorinstalliert ist.
jobshä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).