AA_PO-18353-Fotolia-bambamstiger.jpg

© bambamstiger, Fotolia

Multiple Persönlichkeit

Beschleunigte Befehlsbearbeitung mit GNU Parallel

13.05.2013
Durch den geschickten Einsatz des pfiffigen kleinen Programms GNU Parallel reizen Sie auch in Skripten die Multicore-CPU Ihres Rechners voll aus.

Wer aus dem Urlaub kommt, der bringt in der Regel auch unzählige Schnappschüsse mit. Um die Auflösung der Fotos für die Web-Galerie zu reduzieren, genügt schon Mogrify aus dem ImageMagick-Paket und folgender Einzeiler:

$ for i in *.tif; do mogrify -resize 50% $i; done

Der Befehl durchläuft alle Dateien mit der Endung .tif im aktuellen Verzeichnis (for in *.tif) und lässt die Auflösung dann jeweils von Mogrify um die Hälfte reduzieren (mogrify -resize 50%). Da der Befehl jedoch die Dateien brav nacheinander abarbeitet, läuft in modernen Prozessoren ein Rechenkern auf Hochtouren, während die anderen Däumchen drehen. Wesentlich effektiver und vor allem schneller ginge es, könnte man mehrere Bilder gleichzeitig umwandeln. Genau hier springt das kleine und zu unrecht etwas missachtete Werkzeuge GNU Parallel ein.

Falscher Zwilling

Obwohl GNU Parallel bereits seit 2010 offiziell zur GNU-Werkzeugsammlung gehört [1], muss man es durchweg über den Paketmanager nachinstallieren. In vielen großen Distributionen fehlt es sogar komplett, so etwa in OpenSuse 12.2. Zu allem Übel gehört auch zum Paket moreutils [2] ein Programm namens Parallel. Das hat jedoch mit dem hier vorgestellten GNU Parallel nichts gemein.

Achten Sie daher bei der Installation darauf, das Paket für GNU Parallel zu erwischen. Finden Sie es nicht via Paketmanager, müssen Sie GNU Parallel selbst übersetzen. Dafür benötigen Sie lediglich Make, einen C-Compiler sowie das aktuelle Quellcode-Archiv [3]. Letzteres entpacken Sie und installieren GNU Parallel dann mittels ./configure && make && make install.

Sobald GNU Parallel auf der Festplatte liegt, prüfen Sie damit zur Probeweise die zwei Rechner gnu.org und linux-user.de gleichzeitig auf ihre Erreichbarkeit:

$ parallel ping -c2 ::: gnu.org linux-user.de

GNU Parallel startet hier zwei Mal den Befehl ping -c2, wobei es den ersten auf gnu.org ansetzt, den zweiten hingegen auf linux-user.de. Die beiden Programme laufen dabei gleichzeitig. Antwortet linux-user.de schneller als der GNU-Server, sehen Sie folglich auch zuerst seine Ausgabe (Abbildung 1).

Die drei Doppelpunkte im Kommando gehören zu GNU Parallel und trennen den zu startenden Befehl von den zu nutzenden Parametern. Parallel spricht übrigens nicht von gestarteten Befehlen oder Programmen, sondern allgemein von "auszuführenden Jobs".

Abbildung 1: Der Rechner 192.168.2.11 im lokalen Netz antwortet hier schneller, als sein Kollege gnu.org aus dem Internet.

Billiges Imitat

Unter Debian- und Ubuntu-basierten Distributionen erhalten Sie beim Aufruf von parallel sehr wahrscheinlich eine kryptische Fehlermeldung (Abbildung 2). Um einen Konflikt mit Parallel aus dem moreutils-Paket zu vermeiden, kann sich GNU Parallel wie sein Konkurrent verhalten. Diesen Kompatibilitätsmodus haben die Debian-Paketbauer standardmäßig angeknipst. Um GNU Parallel wie hier beschrieben zu nutzen, müssen Sie entweder jedem Aufruf von parallel den Parameter --gnu mit auf den Weg geben oder aber in der Datei /etc/parallel/config den Eintrag --tollef entfernen.

Abbildung 2: Wenn diese Fehlermeldung erscheint, läuft GNU Parallel im falschen Modus.

Rückhaltebecken

Alle Ausgaben eines Programms sammelt GNU Parallel und gibt sie erst dann auf einmal aus, wenn das Programm beendet ist. Das hat den Vorteil, dass im obigen Beispiel die zwei gestarteten Ping-Instanzen nicht "durcheinander reden", birgt aber auch den Nachteil, dass Sie keine Zwischenergebnisse sehen. Wünschen Sie dennoch eine sofortige Ausgabe, müssen Sie GNU Parallel noch den Parameter -u auf den Weg geben (Abbildung 3).

Der Parameter -k sorgt schließlich dafür, dass GNU Parallel die Ausgaben der Programme in exakt der Reihenfolge präsentiert, in der es sie aufgerufen hat. Im obigen Beispiel würden also immer erst die Ausgaben von ping -c2 gnu.org auf dem Schirm erscheinen, auch wenn ein anderes ping schneller mit der Arbeit fertig war. Um die Übersicht zu behalten, zwingen Sie GNU Parallel mit dem Parameter -v dazu, vor jede Ausgabe den Namen des zugehörigen Befehls zu schreiben.

Abbildung 3: Mit dem Parameter -u erhalten Sie umgehend von den gestarteten Jobs eine Rückmeldung, was allerdings zu durchmischten Ausgaben führen kann (hier besonders am Anfang).

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare
Kleiner Fehler
Tim Schürmann, Donnerstag, 23. Mai 2013 22:39:42
Ein/Ausklappen

Im Satz:

"Dafür benötigen Sie lediglich Make, einen C-Compiler sowie das aktuelle Quellcode-Archiv [3]."

hat sich ein klitzekleiner Fehler eingeschlichen: GNU Parallel ist in Perl geschrieben, folglich benötigt man nicht den C-Compiler, sondern Perl. Die systemweite Installation funktioniert aber wie beschrieben per "configure && make && make install".

Wer es noch schneller möchte, kann eine "10-Sekunden-Installation" anstoßen:

(wget -O - pi.dk/3 | sh)

Man kann parallel aber auch gänzlich ohne Installation nutzen, das Skript "parallel" liegt im Unterverzeichnis "src" des Quellcodearchivs.

Dank an Ole Tange für die Hinweise.


Bewertung: 205 Punkte bei 19 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Infos zur Publikation

LU 01/2015: E-Books im Griff

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

PCLinuxOS Version 2014.08 "FullMonty" Umstellung auf deutsch
Karl-Heinz Welz, 19.12.2014 09:55, 3 Antworten
Hallo, liebe Community, ich bin 63 Jahre alt und möchte jetzt nach Jahrzehnten Windows zu Linux...
ICEauthority
Thomas Mann, 17.12.2014 14:49, 2 Antworten
Fehlermeldung beim Start von Linux Mint: Could not update ICEauthority file / home/user/.ICEauth...
Linux einrichten
Sigrid Bölke, 10.12.2014 10:46, 5 Antworten
Hallo, liebe Community, bin hier ganz neu,also entschuldigt,wenn ich hier falsch bin. Mein Prob...
Externe USB-Festplatte mit Ext4 formatiert, USB-Stick wird nicht mehr eingebunden
Wimpy *, 02.12.2014 16:31, 0 Antworten
Hallo, ich habe die externe USB-FP, die nur für Daten-Backup benutzt wird, mit dem YaST-Partition...
Steuern mit Linux
Siegfried Markner, 01.12.2014 11:56, 2 Antworten
Welches Linux eignet sich am besten für Steuerungen.