Ich schreibe ein kleines Skript, das den "PNGOUT" util auf ein paar hundert PNG-Dateien aufruft. Ich habe einfach:Bash: Wie man Aufgaben einfach parallelisiert?
find $BASEDIR -iname "*png" -exec pngout {} \;
Und dann schaute ich auf meinem CPU-Monitor und bemerkte nur eine des Kerns verwendet wurde, was sehr traurig ist.
In der heutigen Zeit von Dual, Quad, Octo und Hexa (?) Kerne Desktop, wie kann ich einfach diese Aufgabe mit Bash parallelisieren? (Es ist nicht das erste Mal, dass ich ein solches Bedürfnis habe, denn eine ganze Reihe dieser Utilities sind Mono-Threading ... Ich hatte bereits den Fall mit MP3-Encodern).
Würde einfach alle pngout im Hintergrund tun? Wie würde mein finden Befehl dann aussehen? (Ich bin mir nicht sicher, wie man das "&" -Zeichen mischt)
Wenn ich drei hunderte Bilder habe, würde das bedeuten, zwischen dreihundert Prozessen zu tauschen, was sowieso nicht gut aussieht !?
Oder sollte ich kopiere meine drei Hunderte von Dateien oder so in „nb dirs“, wo „nb dirs“ die Anzahl der Kerne werden würde, dann gleichzeitig laufen „nb findet“? (was nahe genug wäre)
Aber wie würde ich das tun?
Guter Fang. Der Vorteil von Open Source. Jemand hat sich die Zeit genommen, den Spawn- und Überwachungscode in Xargs zu erstellen. Das ist relativ trivial für so etwas wie xargs. Beachten Sie, dass tt wahrscheinlich Ihre CPU-Temperatur für den Zeitraum anheben wird, in dem sie ausgeführt wird. Ich überwache meinen Quadcore und habe selten eine signifikante Last. Es gibt vier BOINC-Aufgaben bis zum Limit, so dass der durchschnittliche Lastwert fast immer etwas über 4 liegt. – BillThor
haha! Ich hatte eine schwache Erinnerung, dass Xargs das können ... aber es machte mehr Spaß, es in bash zu machen, auch wenn es nicht optimal ist. (Anmerkung, benutze -print0 auf find und -0 in xargs, um Probleme mit fiesen Dateinamen zu vermeiden) – Javier
@Javier: es ist sowieso großartig, hier verschiedene Möglichkeiten zu sehen :) Ich habe meine eigene Antwort bearbeitet, um dein * -print0 */* -0 * Vorschlag :) – NoozNooz42