2016-12-20 15 views
3

このスクリプトを並列に実行しようとしていますが、それぞれのセットで< = 4です。 runspr.pyはそれ自体が平行であり、それはうまくいきます。私がやろうとしているのは、どのインスタンスでも4ループだけを実行することです。bash loop parallel in

私の現在のコードでは、すべてを実行します。

#!bin/bash 
for i in * 
do 
    if [[ -d $i ]]; then 
    echo "$i id dir" 
    cd $i 
     python3 ~/bin/runspr.py SCF & 
    cd .. 
    else 
    echo "$i nont dir" 
    fi 
done 

Iは、https://www.biostars.org/p/63816/https://unix.stackexchange.com/questions/35416/four-tasks-in-parallel-how-do-i-do-that に従ったが、並行してコードをimplimentすることができませんでした。

答えて

5

ループはforループを使用する必要はありません。あなたはfindで、このようなgnu parallelを使用することができます。

find . -mindepth 1 -maxdepth 1 -type d ! -print0 | 
parallel -0 --jobs 4 'cd {}; python3 ~/bin/runspr.py SCF' 
+0

関連検索: 'パラレル「CD {}; python3〜/ bin/runspr.py SCF '::: */' –

0

別の可能な解決策がある:

find . -mindepth 1 -maxdepth 1 -type d ! -print0 | 
xargs -I {} -P 4 sh -c 'cd {}; python3 ~/bin/runspr.py SCF'