如何用Bash拆分文件列表并行启动4个Python内核执行脚本
Bash实现粗粒度4进程并行处理方案
核心前提:确认execute_function.py支持接收多个文件路径作为命令行位置参数,对传入的每个文件依次调用func(file)执行,即基础调用格式为python execute_function.py 文件1路径 文件2路径 ...。
零依赖原生Bash实现(无需安装额外工具)
不需要依赖任何第三方命令行工具,用Bash原生数组切片+后台进程即可实现,直接写如下shell脚本运行即可:
#!/bin/bash # 替换为你的待处理文件所在目录,如需按后缀筛选可调整通配符,比如*.txt只取txt文件 FILES=(/path/to/your/input_dir/*) # 每组文件数、并行进程数 PER_GROUP=25 PARALLEL_NUM=4 for ((i=0; i<PARALLEL_NUM; i++)); do # 切片取出当前组对应的文件列表 current_group=("${FILES[@]:i*PER_GROUP:PER_GROUP}") # 后台启动独立Python进程处理当前组,&符号表示将进程放入后台独立运行 # 如需保留日志可加重定向:python execute_function.py "${current_group[@]}" > run_$i.log 2>&1 & python execute_function.py "${current_group[@]}" & done # 阻塞等待所有后台Python进程执行完毕 wait echo "全部100个文件处理完成"
实现说明:
- 每个通过
&启动的Python进程都是独立的操作系统进程,拥有完全独立的Python解释器内核,不受GIL锁限制,可真正并行跑满CPU核心 - Bash原生数组切片自动完成每组25个文件的拆分,若文件总数不是刚好100(比如多2个),最后一组会自动取剩余所有文件,不会出现越界报错
- 每个Python进程启动后会连续处理分配到的25个文件,不存在频繁启动/销毁解释器的额外开销,符合粗粒度暴力并行的需求
更简洁的实现(可安装GNU Parallel的场景)
如果运行环境允许安装GNU Parallel(Debian/Ubuntu执行apt install parallel,CentOS执行yum install parallel即可安装),不需要手动写分组逻辑,一行命令即可完成:
# -j 4 指定同时启动4个并行进程 # -N 25 指定给每个进程传入25个文件作为参数 parallel -j 4 -N 25 python execute_function.py ::: /path/to/your/input_dir/*
该方式鲁棒性更强,自动处理分组不均、进程异常退出提示、进度展示等逻辑,适合长期复用的场景。
内容的提问来源于stack exchange,提问作者prm
相关产品推荐
相关产品推荐

