Führen Sie den Befehl für mehrere Threads aus

555
sanjihan

Ich führe einen Befehl (pngquant, um genau zu sein: https://github.com/pornel/pngquant ) in einem Terminalfenster aus. Ich habe festgestellt, dass ich, wenn ich 4 Terminal-Fenster öffne und den Befehl pngquant in jedem von ihnen ausführt, die Geschwindigkeit um das Vierfache erhöht, wodurch die Komprimierung der Bilder in derselben Zeit um das Vierfache erhöht wird.

Also habe ich diesen Ansatz verwendet und jedem pngqunat-Prozess einen Teil der Images zugewiesen, die ich komprimieren möchte, wodurch effektiv mehrere Prozesse auf mehreren Threads erstellt werden

Können Sie den Befehl für mehrere Threads ausführen, ohne diese Tricks auszuführen, die ich getan habe? Ich möchte nur sagen "Pngquant-Komprimierung für all diese Bilder ausführen und alle verfügbaren Threads verwenden."

2
Sie könnten "parallel" einstellen. simlev vor 6 Jahren 4

2 Antworten auf die Frage

1
simlev

Erweitern meines vorherigen Kommentars zu einer Antwort.

Gnu parallel ist das Befehlszeilentool, mit dem Jobs gleichzeitig ausgeführt werden können. Dabei werden mehrere Threads, Kerne, CPUs und PCs verwendet. xargs bietet jetzt ähnliche Funktionen mit dem Hinzufügen des -PSwitches.

Ich habe einen Test für Sie auf einem Zwei-Kern- VPS durchgeführt, mit pngquantdem eine Reihe von .pngDateien (126 Bilder mit einer Größe von durchschnittlich 9 MB) konvertiert wurden .

pngquant *.png hat 26 Minuten gedauert.

find . -iname "*.png" | parallel pngquant {} dauerte 14 minuten.

topzeigt die parallele Ausführung von zwei pngquantBefehlen gleichzeitig:

 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5808 user 20 0 70948 59164 2140 R 100.0 2.9 0:03.49 pngquant 5811 user 20 0 70952 61000 2024 R 99.3 3.0 0:05.67 pngquant 
0
A. Loiseau

Sie suchen genau das gleiche System, das diese aktuelle Frage benötigt. Die Antwort (Python Concurrent-based Script) passt perfekt zu Ihren Anforderungen, sobald Sie ein kleines bisschen für Ihren einfacheren Fall angepasst haben.