使用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 # 新建一个fifo类型的文件
exec 6<> $tmp_fifofile # 将fd6指向fifo类型
rm $tmp_fifofile
thread=3
# 此处定义线程数
for ((i=0;i<$thread;i++)); do
echo
done >& 6 #在fd6中放置了$thread个回车符
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端