meine vielen Digitalbildern wandele ich oft per Kommandozeile um, dcraw und
ImageMagick sind so die Standardtools. Und diese rechnen teilweise recht
lange.
Aber die üblichen "for i in ...." Schleifen arbeiten alles schön der Reihe
nach ab, damit läuft das alles nur auf einem Topf.
Gibt es nicht einen Wrapper, so ein "for2 in ....", der dann immer zwei
Kommandos gleichzeitig startet? So ähnlich wie "make -j4" oder so?
TIA, Andreas
--
Wer mir per Mail antworten möchte sollte 'erdbeere' im Betreff erwähnen,
sonst wird die Mail zusammen mit SPAM und Würmern ungelesen gelöscht.
Andreas Delp wrote:
> Gibt es nicht einen Wrapper, so ein "for2 in ....", der dann immer zwei
> Kommandos gleichzeitig startet? So �hnlich wie "make -j4" oder so?
>
Wie w�rs mit
for f in ...; do (( j++ ));(( j%=2 ));[ $j -eq 0 ] && wait; command&; done
lg. jakob
--
jakob kollmann www.filofant.org
Minds are like parachutes: they only function when they're open.
(Tommy Dewar, 1864 - 1930)
In so einem Fall nehme ich dann einfach make. Das Makefile kann man vom
Script on-the-fly generieren lassen oder ein Standard-Makefile nehmen,
das einfach nur Musterregeln enthält ('out/%.jpg: in/%.raw'), und alle
Ziele auf der Kommandozeile angeben.
Stefan
> meine vielen Digitalbildern wandele ich oft per Kommandozeile um, dcraw und
> ImageMagick sind so die Standardtools. Und diese rechnen teilweise recht
> lange.
>
> Aber die üblichen "for i in ...." Schleifen arbeiten alles schön der Reihe
> nach ab, damit läuft das alles nur auf einem Topf.
>
> Gibt es nicht einen Wrapper, so ein "for2 in ....", der dann immer zwei
> Kommandos gleichzeitig startet? So ähnlich wie "make -j4" oder so?
Wenn deine Jobs länger als 1 Sekunde brauchen kannst du das ja anpassen:
# shellthreads - pseudo threads in bourne shell
# Problem:
# All jobs in a shell program are executed like a batch, one after
# another. But what if you have jobs that could be executed
# concurrently? Imagine a list of downloads, fetched with wget.
# Most likely a single wget job wouldn't saturate your bandwidth.
# Running more than one wget would utilise your bandwidth more
# efficiently. You could start the jobs with ,,wget url &'', but
# that would need your constant attention. Could a shell program
# do it for you in a clean way?
# Answer:
# Yes! Even tho it's kind of ugly. Enjoy :).
Der Rest ist in dieser Datei:
http://www.tecneeq.de/files/shell/shellthreads/shellthreads.txt
Mit 'make -j' wäre es auch machbar.
Karsten
--
() My homepage is http://www.tecneeq.de/ and your homepage sucks¹!
<\/>
_/\_ ¹) Unless it has animated gifs from 1996, then it rocks!
> Gibt es nicht einen Wrapper, so ein "for2 in ....", der dann immer zwei
> Kommandos gleichzeitig startet? So �hnlich wie "make -j4" oder so?
xjobs sollte das k�nnen, hab leider keine Erfahrung damit.
http://www.maier-komor.de/xjobs.html
Beste Gr�
> Gibt es nicht einen Wrapper, so ein "for2 in ....", der dann immer zwei
> Kommandos gleichzeitig startet? So ähnlich wie "make -j4" oder so?
Ihr seit alle so umständlich, das geht mit GNU-xargs doch viel
mächtiger und einfacher, siehe:
--max-procs=max-procs, -P max-procs
Run up to max-procs processes at a time; the default is 1. If
max-procs is 0, xargs will run as many processes as possible at
a time. Use the -n option with -P; otherwise chances are that
only one exec will be done.
Also z.B.
find . -type f -name "*.tga" -print0 | xargs -n1 -P4 tga2jpg.script
(Ich bin mir nicht mehr ganz sicher ob man bei -n besser 1 oder "viel"
angibt, imho wars so daß bei -n1 -P4 das tga2jpg.script mit einem
Parameter aufgerufen wird, davon aber vier parallel)
Christian Brandt