Bash 多个shell脚本工作程序
我们想解释成吨的坐标,并使用多个工作人员来处理它们。 我们得到了什么:Bash 多个shell脚本工作程序,bash,shell,Bash,Shell,我们想解释成吨的坐标,并使用多个工作人员来处理它们。 我们得到了什么: files/ runner.sh worker.sh #!/usr/bin/env bash n_processes=$(find files/ -type f | wc -l) echo "spawning ${n_processes}" for file in $(find . -type f); then bash worker.sh "${file}" & done wait coord
files/ runner.sh worker.sh
#!/usr/bin/env bash
n_processes=$(find files/ -type f | wc -l)
echo "spawning ${n_processes}"
for file in $(find . -type f); then
bash worker.sh "${file}" &
done
wait
coords.txt
100, 100, 100
244, 433, 233
553, 212, 432
776, 332, 223
...
8887887, 5545554, 2243234
worker.sh
coord_reader='^([0-9]+), ([0-9]+), ([0-9]+)$'
while IFS='' read -r line || [[ -n "$line" ]]; do
if [[ $line =~ $coord_reader ]]; then
x=${BASH_REMATCH[1]}
y=${BASH_REMATCH[2]}
z=${BASH_REMATCH[3]}
echo "x is $x, y is $y, z is $z"
fi
done < "$1"
但是,如何为每个工作人员分配一个文件
我是stackoverflow新手,请随时发表评论,以便提高我的提问技能。要运行bash中的工作人员来处理大量文件,请执行以下操作: 文件体系结构:
files/ runner.sh worker.sh
#!/usr/bin/env bash
n_processes=$(find files/ -type f | wc -l)
echo "spawning ${n_processes}"
for file in $(find . -type f); then
bash worker.sh "${file}" &
done
wait
文件/
:这是一个包含大量文件的文件夹(例如1000个)runner.sh
:启动大量工作人员worker.sh文件
:处理文件的任务
例如:
工人。sh:
#!/usr/bin/env bash
sleep 5
echo $1
要运行files/
中的所有文件,请执行以下操作:
runner.sh:
files/ runner.sh worker.sh
#!/usr/bin/env bash
n_processes=$(find files/ -type f | wc -l)
echo "spawning ${n_processes}"
for file in $(find . -type f); then
bash worker.sh "${file}" &
done
wait
/!\1000道工序太多了强>
最好创建一个“进程池”(在这里,它保证同时运行的进程数量最多,旧的子进程不会被重新用于新任务,而是在其任务完成或失败时死亡):
它实际上不是一个进程池,但它避免了同时有许多进程处于活动状态,同时活动的最大进程数由n\u进程
给出
执行
bash runner.sh
我会使用GNU Parallel来执行。假设您希望一次运行8个工人,直到所有处理完成:
parallel -j 8 --pipepart -a coords.txt --fifo bash worker.sh {}
其中:
- -j8表示“一次运行8个作业”
- --pipepart表示“将输入文件拆分为多个部分”
- -coords.txt表示“这是输入文件”
- --fifo的意思是“创建一个临时fifo将数据发送到,并将其名称保存在
中以传递给您的工作脚本”{}
echo
命令仅用于演示:)请看一看。bash是完成此任务的正确工具吗?您是否考虑过更合适的工具,例如Python或Perl?您知道如何做到这一点吗<代码>/!\1000个进程太多了,最好创建一个进程池u限制进程的想法非常好:)我来试试!我得到以下语法错误:意外标记附近的语法错误
do'I将详细说明解决方案;)让我们。