Linux 下并发执行重复任务
现在有一些重复的任务,如下
rsync 10001.mp4 xx:10001.mp4
...
rsync 50001.mp4 xx:50001.mp4
...
rsync 90001.mp4 xx:90001.mp4
现在有一堆文件需要做转码再上传到 OSS,如果按顺序执行,那速度会非常慢,如果要拆分成多个文件再分别运行又会非常麻烦。
如果要自己写代码控制线程,又得写一些代码,最简单优雅的方式,就是使用 parallel
Centos 下安装过程非常简单,命令如下:
yum install -y epel-release
yum install -y parallel
官方文档
https://www.gnu.org/software/parallel/parallel_tutorial.html
并发执行方法如下:
- 先将多行命令写入一个文本
- 执行 parallel 命令,并传入并发限制,如果参数是一个文件,则传4个冒号,如果是文字,则传3个冒号
parallel -j 10 :::: job.txt
如果有大批相同的任务或者命令需要执行,比如执行 100 次 curl baidu.com
命令,实现10个并发执行
命令如下
parallel -j 10 "sleep 1; echo {}" ::: `seq 1 100`
实测情况来看,Centos 下会生成最多不超过 CPU 核数的进程数,可以通过-j 0
来实现根据 CPU 核数自动生成进程数。