shell多线程之进程间通信(3)

之前的文章依赖是1对1或1多对的,但每个任务的前置任务都只有1个。

本文的核心在于一个任务依赖于多个任务的执行完成,如上图所示,这个任务就是fact,只有new和dviduser两个任务都完成的情况下,fact才能继续执行。

init_pipe.sh

# 初始化file descriptor
init_pipe(){
[ -e /tmp/fd1001 ] || mkfifo /tmp/fd1001
exec 1001<>/tmp/fd1001
rm -rf /tmp/fd1001

[ -e /tmp/fd1002 ] || mkfifo /tmp/fd1002
exec 1002<>/tmp/fd1002
rm -rf /tmp/fd1002

[ -e /tmp/fd1003 ] || mkfifo /tmp/fd1003
exec 1003<>/tmp/fd1003
rm -rf /tmp/fd1003

[ -e /tmp/fd1004 ] || mkfifo /tmp/fd1004
exec 1004<>/tmp/fd1004
rm -rf /tmp/fd1004

[ -e /tmp/fd1005 ] || mkfifo /tmp/fd1005
exec 1005<>/tmp/fd1005
rm -rf /tmp/fd1005

[ -e /tmp/fd1006 ] || mkfifo /tmp/fd1006
exec 1006<>/tmp/fd1006
rm -rf /tmp/fd1006

[ -e /tmp/fd1007 ] || mkfifo /tmp/fd1007
exec 1007<>/tmp/fd1007
rm -rf /tmp/fd1007
}

destroy_pipe(){
exec 1001<&-
exec 1001>&-
exec 1002<&-
exec 1002>&-
exec 1003<&-
exec 1003>&-
exec 1004<&-
exec 1004>&-
exec 1005>&-
exec 1005<&-
exec 1006<&-
exec 1006>&-
exec 1007>&-
exec 1007<&-
}

work.sh

# 初始化file descriptor

. init_pipe.sh
. sql_lib.sh
################################################################
newFun(){
start_day=$1
end_day=$2

while [ ${start_day} -le ${end_day} ]
do

        day=`date  +"%Y-%m-%d" -d  "${start_day}"`

        echo "${new_sql//_day_/${day}}"
        hive -e "${new_sql//_day_/${day}}"
        echo ${start_day} >& 1001
        start_day=`date  +"%Y%m%d" -d  "${start_day} 1 days" `
done
}
################################################################
factFun(){
start_day=$1
end_day=$2

while [ ${start_day} -le ${end_day} ]
do

        day=`date  +"%Y-%m-%d" -d  "${start_day}"`


    read -u 1001 j
    read -u 1007 k
    if [ ${start_day} -le $j -a ${start_day} -le $k ];then
        echo "${fact_sql//_day_/${day}}"
        hive -e "${fact_sql//_day_/${day}}"
        echo ${start_day}>& 1002
        echo ${start_day}>& 1003
        echo ${start_day}>& 1004
    fi
        start_day=`date  +"%Y%m%d" -d  "${start_day} 1 days" `
done
}


################################################################
dvidUserIdFun(){
start_day=$1
end_day=$2

while [ ${start_day} -le ${end_day} ]
do
        day=`date  +"%Y-%m-%d" -d  "${start_day}"`

    echo "${dvid_user_id_sql//_day_/${day}}"
    hive -e "${dvid_user_id_sql//_day_/${day}}"
    echo ${start_day}>& 1005
    echo ${start_day}>& 1006
    echo ${start_day}>& 1007
        start_day=`date  +"%Y%m%d" -d  "${start_day} 1 days" `
done
}



init_pipe

newFun "${start}" "${end}" &
factFun "${start}" "${end}" &
dvidUserIdFun "${start}" "${end}" &

wait

destroy_pipe

 

转载于:https://www.cnblogs.com/wangbin2188/p/9909484.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值