如何用Bash脚本批量并行执行Python命令(每次4进程)
批量并行执行Python脚本的Bash解决方案
原脚本的问题
- 数组元素访问错误:
input_list[n]不符合Bash数组语法,正确写法应为${input_list[$n]},否则会被当成普通字符串而非数组元素 - 缺少最后一批进程的等待:循环结束后,最后一批(不足4个或刚好4个)的后台进程可能仍在运行,脚本会直接退出,导致进程未完成
- 初始wait逻辑冗余:第一次循环时还未启动任何后台进程就执行wait,虽不影响功能,但逻辑不够严谨
修正后的脚本
情况1:输入文件存放在数组中
假设你已定义输入文件数组 input_list,例如:
input_list=(input_0.txt input_1.txt ... input_11.txt)
修正后的并行控制脚本:
# 设置每次并行处理的进程数 MAX_PARALLEL=4 # 初始化进程计数器 j=0 for ((n=0; n<12; n++)); do # 启动后台进程处理当前输入文件 python test.py -i "${input_list[$n]}" -p parameter_1 -o "output_$n" & # 每启动指定数量的进程后,等待所有后台进程完成再继续下一批 ((j++)) if ((j % MAX_PARALLEL == 0)); then wait j=0 # 重置计数器 fi done # 等待最后一批未完成的进程执行完毕 wait
情况2:输入文件命名有规律(如input_0到input_11)
如果输入文件按固定规则命名,无需数组,直接生成文件名即可:
MAX_PARALLEL=4 j=0 for ((n=0; n<12; n++)); do python test.py -i "input_$n" -p parameter_1 -o "output_$n" & ((j++)) if ((j % MAX_PARALLEL == 0)); then wait j=0 fi done wait
脚本说明
MAX_PARALLEL=4:自定义每次并行处理的进程数,可根据机器性能调整&:将Python脚本放入后台运行,实现并行处理wait:暂停脚本执行,直到所有后台进程完成,确保一批任务全部结束后再启动下一批- 循环末尾的
wait:保证最后一批(可能不足4个)的进程全部执行完成后脚本才退出
内容的提问来源于stack exchange,提问作者user20505088
相关产品推荐
相关产品推荐

