[root@centos76 parallel]# for i in {1..10};do echo $i >> example.txt;done
[root@centos76 parallel]# cat parallel_run.sh
#!/bin/bash
file_name=${1:?we need a parameter!}
if [ ! -f "$file_name" ];then
echo "Can't find the file $file_name !"
exit 1
fi
while read ;do
{
echo $REPLY
sleep 1
}
done < $file_name
echo done
运行:
[root@centos76 parallel]# time ./parallel_run.sh example.txt
1
2
......
9
10
done
real 0m10.114s
user 0m0.030s
sys 0m0.071s
&
实现多进程,wait
实现父进程等待子进程完成后退出
[root@centos76 parallel]# cat parallel_run.sh
#!/bin/bash
file_name=${1:?we need a parameter!}
if [ ! -f "$file_name" ];then
echo "Can't find the file $file_name !"
exit 1
fi
while read ;do
{
echo $REPLY
sleep 1
} &
done < $file_name
wait
echo done
运行,数字全部一起输出,耗时1s:
[root@centos76 parallel]# time ./parallel_run.sh example.txt
6
7
2
3
4
8
9
10
5
1
done
real 0m1.024s
user 0m0.011s
sys 0m0.012s
[root@centos76 parallel]# cat parallel_run.sh
#!/bin/bash
file_name=${1:?we need a parameter!}
if [ ! -f "$file_name" ];then
echo "Can't find the file $file_name !"
exit 1
fi
thread_num=4
# create pipe
[ ! -p tmp ] && mkfifo tmp
exec 9<>tmp
# fill in the pipe
for ((i=0;i<thread_num;i++)); do
echo 1>&9
done
while read ;do
# remove one line per thread
(read -u 9) # In order to avoid the "read" command in while loop, we use the parentheses here
{
echo $REPLY
sleep 1
# thread run finish, put line back
echo 1>&9
} &
done < $file_name
wait
echo done
运行如下,数字四个一组输出,共三组,耗时3s:
[root@centos76 parallel]# time ./parallel_run.sh example.txt
1
2
3
4
5
6
7
8
9
10
done
real 0m3.019s
user 0m0.014s
sys 0m0.019s
xargs
控制进程数[root@centos76 parallel]# cat parallel_run.sh
#!/bin/bash
whereami=`cd $(dirname $0); pwd`
file_name=${1:?we need a parameter!}
if [ ! -f "$file_name" ];then
echo "Can't find the file $file_name !"
exit 1
fi
thread_num=4
cat $file_name |xargs -n 1 -I {} -P ${thread_num} sh -c "$whereami/print.sh {}"
echo done
[root@centos76 parallel]# cat print.sh
#!/bin/bash
echo $*
sleep 1
运行如下,数字四个一组输出,共三组,耗时3s:
[root@centos76 parallel]# time ./parallel_run.sh example.txt
1
2
3
4
5
6
8
7
9
10
done
real 0m3.033s
user 0m0.033s
sys 0m0.024s
本文分享自 WriteSimpleDemo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!