在bash中生成多个python脚本
我使用下面的脚本在服务器中生成多个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
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中的多处理库吗?