我有以下代码:
from eh.models import ExerciseCardio, Exercise, ExerciseWeights
c = ExerciseCardio.objects.create(name="Cardio!")
w = ExerciseWeights.objects.create(name="Weights!")
print(Exercise.objects.filter(name="Cardio!").select_subclasses().get())
# Cardio! (<class 'eh.models.ExerciseCardio'>)
for e in Exercise.objects.all().select_subclasses():
print(e)
# Cardio! (<class 'eh.models.ExerciseCardio'>)
# Weights! (<class 'eh.models.ExerciseWeights'>)
我的问题是如何并行运行所有j的命令? 也就是说,我希望每个j中的命令顺序运行,但所有j的命令并行运行。 我发现一个人可以做
for i in "${atomic_mass[@]}"
do
cd /home/eric2207/data/Z=66
mkdir DY"$i"
for j in "${deformation[@]}"
do
cd /home/eric2207/DRHBc
make clean
sed -e "s/\${A}/$i/" -e "s/\${beta}/$j/" $input > $output
make
cd /home/eric2207/data/Z=66/DY"$i"
mkdir ./"$j"
cd ./"$j"
cp /home/eric2207/DRHBc/1drhbws .
cp /home/eric2207/DRHBc/dir.dat .
cp /home/eric2207/DRHBc/paramet.for .
done
done
但是,这对于我的情况没有帮助,因为我希望嵌套在第二个for循环中的命令按顺序运行。 任何帮助将不胜感激!
答案 0 :(得分:0)
不是在正确的计算机上,而是:
for
do
...
for
do
(
...
...
) &
done
wait
done
答案 1 :(得分:0)
do_one() {
i="$1"
j="$2"
jobslot="$3"
cd /home/eric2207/data/Z=66
mkdir -p DY"$i"
cd /home/eric2207/
# You need a new dir per combination due to race condition
rsync -a DRHBc/ DRHBc-"$jobslot"/
cd DRHBc-"$jobslot"
make clean
sed -e "s/\${A}/$i/" -e "s/\${beta}/$j/" $input > $output
make
cd /home/eric2207/data/Z=66/DY"$i"
mkdir ./"$j"
cd ./"$j"
cp /home/eric2207/DRHBc-"$jobslot"/1drhbws .
cp /home/eric2207/DRHBc-"$jobslot"/dir.dat .
cp /home/eric2207/DRHBc-"$jobslot"/paramet.for .
}
export -f do_one
parallel do_one {1} {2} {%} ::: "${atomic_mass[@]}" ::: "${deformation[@]}"
强制串行执行外部循环:
inner() {
i="$1"
parallel -q do_one "$i" {1} {%} ::: "${deformation[@]}"
}
export -f inner
env_parallel --env deformation -j1 inner ,,, "${atomic_mass[@]}"