You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中按批次并行执行带动态参数的Java Jar程序

Bash脚本实现分组并行执行Java任务(动态补位)

完整解决方案脚本

# 定义包含54个美国州的列表(示例为部分州,实际替换为完整54个条目)
states=(
    USA+TX USA+CA USA+TN USA+AB
    USA+NY USA+FL USA+IL USA+OH
    USA+PA USA+AZ USA+NC USA+MI
    # ... 补充剩余42个州
)

# 配置参数:每组实例处理的州数量、最大并行实例数
GROUP_SIZE=4
MAX_PARALLEL=4

# 初始化分组容器与进程计数器
current_group=()
process_count=0

for state in "${states[@]}"; do
    current_group+=("$state")
    
    # 当分组满额,或遍历到最后一个州时启动任务
    if [ ${#current_group[@]} -eq $GROUP_SIZE ] || [ "$state" = "${states[-1]}" ]; then
        # 将分组转为逗号分隔的参数格式
        localities=$(IFS=,; echo "${current_group[*]}")
        
        # 后台启动Java任务
        java -jar test-execute.jar --localities="$localities" &
        
        ((process_count++))
        current_group=()
        
        # 达到最大并发数时,等待任意一个进程完成再继续
        if [ $process_count -ge $MAX_PARALLEL ]; then
            wait -n
            ((process_count--))
        fi
    fi
done

# 等待所有剩余后台进程执行完毕
wait

关键逻辑说明

  • 分组处理:遍历州列表时,将州逐个加入临时分组,满4个则转为逗号分隔字符串,作为--localities参数传入Java命令。
  • 动态并行控制:用wait -n监听后台进程,一旦有实例执行完成,立即启动新的分组任务,始终保持最多4个并行实例,最大化16核机器的资源利用率。
  • 边界处理:自动处理最后一组不足4个州的情况(54=4×13+2),确保所有州都被处理,无遗漏。

注意事项

  • 若不同州的处理时间差异较大,wait -n会自动优先补位最快完成的进程空位,避免资源闲置。
  • 可根据实际硬件配置或任务需求,调整GROUP_SIZE(单实例处理州数)和MAX_PARALLEL(最大并行数)参数。

内容的提问来源于stack exchange,提问作者deewreck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:40:24