Kombination von xargs-Optionen
Für unsere letzte Aufgabe werden wir untersuchen, wie wir unsere Bücher in Batches verarbeiten können, während wir dennoch die parallele Verarbeitung nutzen. Wir werden einen etwas anderen Ansatz als ursprünglich vorgeschlagen verwenden, um die gegenseitige Exklusivität der -n
- und -I
-Optionen zu vermeiden.
Schauen wir uns unsere Liste von Klassikbüchern an:
cat ~/project/classic_books.txt
Sie sollten sehen:
Moby_Dick
War_and_Peace
Ulysses
Don_Quixote
The_Odyssey
Madame_Bovary
Lolita
Hamlet
The_Iliad
Crime_and_Punishment
Nun verwenden wir xargs
, um diese Bücher in Batches zu je 2 Büchern mit bis zu 3 parallelen Prozessen zu verarbeiten:
cat ~/project/classic_books.txt | xargs -n 2 -P 3 sh -c 'echo "Processing batch: $0 $1"'
Lassen Sie uns diesen Befehl analysieren:
cat ~/project/classic_books.txt
: Dies liest unsere Liste von Klassikbüchern.
|
: Dieses Pipe-Symbol sendet die Ausgabe an xargs
.
xargs
: Dies ist unser Befehl zum Erstellen und Ausführen von Befehlen aus der Standardeingabe.
-n 2
: Diese Option teilt xargs
mit, dass es 2 Argumente (Büchertitel) pro Befehlsaufruf verwenden soll.
-P 3
: Diese Option teilt xargs
mit, dass es bis zu 3 Prozesse parallel ausführen soll.
sh -c 'echo "Processing batch: $0 $1"'
: Dies ist der Befehl, den xargs
ausführen wird. Er verwendet eine Shell, um die Büchertitel auszugeben. $0
und $1
repräsentieren die beiden von xargs
übergebenen Büchertitel.
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Processing batch: Moby_Dick War_and_Peace
Processing batch: Ulysses Don_Quixote
Processing batch: The_Odyssey Madame_Bovary
Processing batch: Lolita Hamlet
Processing batch: The_Iliad Crime_and_Punishment
Dieser Befehl zeigt, wie wir eine große Anzahl von Elementen effizient in Batches verarbeiten können, während wir dennoch die parallele Verarbeitung nutzen. In diesem Fall verarbeiten wir die Bücher paarweise (aufgrund von -n 2
) und führen bis zu drei dieser Paar-Verarbeitungsbefehle parallel aus (aufgrund von -P 3
).
Der Vorteil dieses Ansatzes besteht darin, dass Sie Elemente in handhabbaren Teilen verarbeiten können (in diesem Fall Paare von Büchern), während Sie dennoch die parallele Verarbeitung nutzen, um den gesamten Vorgang zu beschleunigen. Dies kann besonders nützlich sein, wenn Sie mit großen Datensätzen arbeiten oder wenn Sie die Verarbeitungsgeschwindigkeit mit der Systemressourcenauslastung ausgleichen müssen.
In einem realen Szenario könnten Sie den echo
-Befehl durch ein komplexeres Verarbeitungsskript ersetzen. Beispielsweise könnten Sie unser früheres process_book.sh
-Skript so modifizieren, dass es gleichzeitig zwei Bücher verarbeitet, und es dann anstelle des echo
-Befehls verwenden.