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

并发执行方法如下:

  1. 先将多行命令写入一个文本
  2. 执行 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 核数自动生成进程数。