Bash paralelisiren
Donnerstag, August 16th, 2012Gehen wir von folgenden Szenario aus. Wir wollen eine Funktion in Bash in den Hintergrund schreibe um den Ablauf zu Parallelisieren. In diesem Beispiel wird lediglich ein sleep
ausgeführt.
#!/bin/bash
function background ()
{
#do somsing
sleep $1
}
for i in {1..100}; do
background $i &
done
Problem: Wir wollen aber maximal nur 10 Prozesse gleichzeitig laufen lassen. Dafür habe ich eine Funktion waiting
geschrieben die solange wartet bis die Anzahl des übergebenen wertes erreicht ist. Für das Zählen habe ich Dateien verwendet da wenn man Variablen übergeben würde diese nicht in der for
schleife zur Verfügung stehen würden.
#!/bin/bash
tmpd=`mktemp -d`
function waiting() {
while true; do
if [ `ls $tmpd | wc -l` -le "$1" ]; then
break
fi
sleep .5;
done
}
function background () {
touch $tmpd/$1
#do somsing
sleep $1
rm $tmpd/$1
}
for i in {1..100}; do
background $i &
waiting 10
done
waiting 0
rm -r $tmpd