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: 225 Punkte bei 35 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Infos zur Publikation

LU 06/2015: Shell-Tools

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

Grammatikprüfung in LibreOffice nachrüsten
Grammatikprüfung in LibreOffice nachrüsten
Tim Schürmann, 24.04.2015 19:36, 0 Kommentare

LibreOffice kommt zwar mit einer deutschen Rechtschreibprüfung und einem guten Thesaurus, eine Grammatikprüfung fehlt jedoch. In ältere 32-Bit-Versionen ...

Aktuelle Fragen

Zu wenig Speicherplatz auf /boot unter MATE
Patrick Obenauer, 25.05.2015 14:28, 0 Antworten
Hallo zusammen, ich habe Ubuntu 14.10 mit MATE 1.8.2 (3.16-37) mit Standardeinstellungen aufgese...
Konsole / Terminal in Linux Mint 17.1 deutsch
Dirk Resag, 09.05.2015 23:39, 12 Antworten
Hallo an die Community, ich habe vor kurzem ein älteres Notebook, Amilo A1650G, 1GB Arbeitsspe...
Admin Probleme mit Q4os
Thomas Weiss, 30.03.2015 20:27, 6 Antworten
Hallo Leute, ich habe zwei Fragen zu Q4os. Die Installation auf meinem Dell Latitude D600 verl...
eeepc 1005HA externer sound Ausgang geht nicht
Dieter Drewanz, 18.03.2015 15:00, 1 Antworten
Hallo LC, nach dem Update () funktioniert unter KDE der externe Soundausgang an der Klinkenbuc...
AceCad DigiMemo A 402
Dr. Ulrich Andree, 15.03.2015 17:38, 2 Antworten
Moin zusammen, ich habe mir den elektronischen Notizblock "AceCad DigiMemo A 402" zugelegt und m...