Was ist der beste Weg, um 5 curl
Requests in parallel
einem Bash-Skript auszuführen ? Ich kann sie aus Leistungsgründen nicht seriell ausführen.
Was ist der beste Weg, um 5 curl
Requests in parallel
einem Bash-Skript auszuführen ? Ich kann sie aus Leistungsgründen nicht seriell ausführen.
Antworten:
Verwenden Sie nach einem Befehl '&', um einen Prozess im Hintergrund anzuzeigen, und 'wait', um zu warten, bis der Vorgang abgeschlossen ist. Verwenden Sie '()' um die Befehle, wenn Sie eine Unterschale erstellen müssen.
#!/bin/bash
curl -s -o foo http://example.com/file1 && echo "done1" &
curl -s -o bar http://example.com/file2 && echo "done2" &
curl -s -o baz http://example.com/file3 && echo "done3" &
wait
xargs hat einen "-P" -Parameter, um Prozesse parallel auszuführen. Beispielsweise:
wget -nv http://en.wikipedia.org/wiki/Linux -O- | egrep -o "http://[^[:space:]]*.jpg" | xargs -P 10 -r -n 1 wget -nv
Referenz: http://www.commandlinefu.com/commands/view/3269/parallel-file-downloading-with-wget
Ich benutze Gnu parallel für solche Aufgaben.
curl
mit angeben gnu parallel
?
Hier ist ein curl
Beispiel mit xargs
:
$ cat URLS.txt | xargs -P 10 -n 1 curl
Das obige Beispiel sollte curl
jeweils 10 URLs gleichzeitig enthalten. Das -n 1
gibt es so, dass pro Ausführung xargs
nur 1 Zeile aus der URLS.txt
Datei verwendet wird curl
.
Was jeder der xargs-Parameter bewirkt:
$ man xargs
-P maxprocs
Parallel mode: run at most maxprocs invocations of utility at once.
-n number
Set the maximum number of arguments taken from standard input for
each invocation of utility. An invocation of utility will use less
than number standard input arguments if the number of bytes
accumulated (see the -s option) exceeds the specified size or there
are fewer than number arguments remaining for the last invocation of
utility. The current default value for number is 5000.