在bash中生成多个python脚本

在bash中生成多个python脚本,python,bash,multiprocessing,Python,Bash,Multiprocessing,我使用下面的脚本在服务器中生成多个python脚本。为每个脚本l提供的参数不同,从0到150不等 for i in `seq 0 9`; do for j in `seq 0 14`; do f=$((i*15)) l=$((j+f)) ./script --l ${l} & done i=0 for job in `jobs -p` do pids[${i}]=${job

我使用下面的脚本在服务器中生成多个python脚本。为每个脚本
l
提供的参数不同,从0到150不等

for i in `seq 0 9`;
do 
    for j in `seq 0 14`;
    do 
        f=$((i*15))
        l=$((j+f))
        ./script --l ${l} &
    done
    i=0
    for job in `jobs -p`
    do
        pids[${i}]=${job}
        i=$((i+1))
    done
    for pid in ${pids[*]}; do
        wait ${pid}
    done 
done
上面的语法生成15个python脚本,并等待每个子进程完成,然后生成随后的15个脚本。但是,python脚本对
l
的某些值花费的时间很少,而对
l
的其他值花费的时间很多。我的问题是,如果对于一组给定的15个
l
值,脚本对其中14个值花费的时间很短,而对一个
l
值花费的时间很长,那么上面的脚本在生成下一个15个值之前会等待一个脚本完成,这会导致服务器中的许多内核保持空闲。我想知道是否有一种方法可以修改上面的代码,以便在每次一个子进程完成时生成一个新的子进程(这样在任何给定的时间都有15个子进程运行)


谢谢

这应该可以做到:

for i in $(seq 150)
do
  while [[ $(jobs | wc -l) -ge 15 ]]
  do
    wait -n $(jobs -p)
  done
  script --l "$i" &
done

这个想法是,如果有15个或15个以上的作业,等待至少一个作业完成,直到运行的作业不超过15个;然后繁殖下一个
wait-n
很有用,因为它会在上述任何进程退出时停止等待。

您考虑过使用python中的
多处理库吗?