2016-12-20 1 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 

나는 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'