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

如何在Bash脚本中实现多进程批量处理图片以利用80核服务器

批量并行处理Aletheia隐写分析的Bash脚本优化方案

核心思路

利用GNU Parallel实现80核并行调度,同时通过临时文件+最终合并的方式避免CSV并发写入冲突,既最大化利用服务器算力,又保证输出数据的完整性。

步骤1:安装GNU Parallel

如果服务器未安装,执行对应系统的安装命令:

apt install parallel  # Debian/Ubuntu系
# 或
yum install parallel  # RHEL/CentOS系

步骤2:优化后的完整脚本

以下脚本支持指定分析类型、图片目录和输出CSV,自动并行处理并解决并发写入问题:

#!/bin/bash

# 参数合法性检查
if [ $# -ne 3 ]; then
    echo "用法: $0 <分析类型> <图片目录> <输出CSV>"
    echo "支持的分析类型: ws, rs, triples, spa"
    exit 1
fi

ANALYSIS_TYPE=$1
IMAGE_DIR=$2
OUTPUT_CSV=$3
TMP_DIR="./aletheia_temp_files"
MAX_PARALLEL=80  # 匹配80核服务器配置

# 创建临时目录存储单图片分析结果
mkdir -p "$TMP_DIR"

# 定义单图片处理函数
process_single_image() {
    local img_path=$1
    local analysis_type=$2
    local tmp_output=$3

    # 调用Aletheia分析,跳过表头只保留数据行,写入临时文件
    aletheia analyze "$analysis_type" "$img_path" | awk -F',' 'NR>1 {print $0}' > "$tmp_output"
}

# 导出函数让Parallel可以调用
export -f process_single_image
export ANALYSIS_TYPE TMP_DIR

# 并行遍历并处理所有图片
find "$IMAGE_DIR" -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" \) | \
    parallel -j $MAX_PARALLEL process_single_image {} "$ANALYSIS_TYPE" "$TMP_DIR/{#}.tmp"

# 生成CSV表头(需根据Aletheia实际输出调整字段)
echo "图片路径,特征1,特征2,特征3,..." > "$OUTPUT_CSV"
# 合并所有临时文件数据到最终CSV
cat "$TMP_DIR"/*.tmp >> "$OUTPUT_CSV"

# 清理临时文件
rm -rf "$TMP_DIR"

echo "处理完成,结果已写入$OUTPUT_CSV"

关键细节说明

  • 并行调度:parallel -j 80 控制同时运行80个进程,完全匹配服务器核数;find命令自动遍历目标目录下所有常见图片格式,无需手动列举文件。
  • 并发写入解决:每个进程将单图片分析结果写入独立临时文件,最后统一合并到主CSV,彻底避免多进程同时写文件导致的内容错乱、数据丢失问题。
  • 表头处理:先单独写入CSV标准表头(需根据Aletheia实际输出的字段调整),再合并所有临时数据行,保证CSV格式规范可直接读取。

可选优化:进度监控与错误排查

如果需要实时查看处理进度或排查失败任务,可修改Parallel命令为:

parallel --bar --joblog parallel_task.log -j $MAX_PARALLEL process_single_image {} "$ANALYSIS_TYPE" "$TMP_DIR/{#}.tmp"
  • --bar:显示可视化进度条
  • --joblog parallel_task.log:生成任务日志,记录每个图片的处理状态、耗时,方便定位失败的图片文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:45:03