command & + wait 方式轻松搞定shell多进程,下面给出一个小例子。
首先看main.sh,shell脚本的主实现。
function main(){
while true
do
for((i=0;i<5;i++));
do
{
python number.py $i
} &
done
wait
python another.py
done
}
main
这样就可以开5个进程执行number.py的代码,5个进程是同时进行的。
5个number.py进程执行完之后,执行another.py的代码。循环往复,一直执行。
给出number.py和another.py代码,方便读者直接拿来测试。
number.py
import sys
import time
number = sys.argv[1]
print(number)
if number == "2":
time.sleep(5)
else:
time.sleep(1)
another.py
import time
print("another")
time.sleep(0.8)
如果main.sh中不使用wait指令,number.py和another.py会同时执行,another.py不会等到之前的5个number.py进程执行完之后再运行。
改动为以下形式也是有问题的,并不能保证another.py在5个number.py进程执行完之后运,但是another.py的启动是在5个number.py进程启动之后才进行启动的。
function main(){
while true
do
for((i=0;i<4;i++));
do
python number.py $i &
done
python number.py 5
python another.py
done
}
main