使用FIFO的文件控制shell的线程数

有的时候我们跑一个批量的脚本并发不能太大,需要对线程控制。这个就是本脚本使用的场景。

#!/bin/bash

date +'%Y/%m/%d %H:%M:%S'

HADOOP_CONF_DIR=/opt/cloudera/parcels/SPARK2-2.1.0.cloudera1-1.cdh5.7.0.p0.120904/lib/spark2/conf/yarn-conf
export HADOOP_CONF_DIR

PYSPARK_PYTHON=/var/local/anaconda3/bin/python
export PYSPARK_PYTHON

tmp_fifofile="/tmp/$$.fifo"
mkfifo tmp_fifofile # 将fd6指向fifo类型
rm $tmp_fifofile

thread=3
# 此处定义线程数
for ((i=0;i

for ((i=3;i<4;i++))
do
read -u6 # 一个read -u6命令执行一次,就从fd6中减去一个回车符,然后向下执行
{
{
/opt/cloudera/parcels/SPARK2/bin/spark2-submit --master yarn --deploy-mode client /home/wangxin/step3test.py $i
} && {
echo "subprocess is finished"
} || {
echo "error"
}
echo >& 6 #当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个
} &
done

wait # 等待所有后台子进程结束

exec 6>&- #关闭fd6

date +'%Y/%m/%d %H:%M:%S'

exit 0

你可能感兴趣的:(使用FIFO的文件控制shell的线程数)