[英]Running parallel commands in bash
我遇到的情况是我的目录“批次”包含几个批处理文件:
one.txt
two.txt
...
seventy.txt
这些文件中的每一个都需要通过python脚本进行如下处理:
python processor.py --inputFile=batches/one.txt
我当前的实现是这样的:
for f in batches/$f
do
python processor.py --inputFile=batches/$f
done
我有几百个批次,所以所有这些都可以并行运行
python processor.py --inputFile=batches/$f &
不可行。
但是,我认为一次运行约10个也不是问题。
我知道语法
{
python processor.py --inputFile=batches/batchOne.txt
python processor.py --inputFile=batches/batchTwo.txt
} &
{
python processor.py --inputFile=batches/batchThree.txt
python processor.py --inputFile=batches/batchFour.txt
}
应该给我类似于我想要的结果。 但是,还有更好的解决方案吗? 基本上,对于我来说,给定命令模板
python processor.py --inputFile=batches/$1
还有一个批处理列表,我想控制同时执行多少个。
我正在使用Ubuntu Linux。
parallel -j 10 command_line
sudo apt-get install parallel
parallel
是一个很棒的工具,但并非总是可以选择在系统上安装其他软件包。 您可以与bash jobs
parallel
模拟。
这是一个小例子:
#!/usr/bin/env bash
for FILE in /tmp/*.sh;
do
# count only running jobs.
JOBS=$(jobs -r | wc -l)
while [[ ${JOBS} -ge 3 ]];
do
echo "RUNNING JOBS = ${JOBS} => WAIT"
sleep 5 # too much, just for demo
done
echo "APPEND ${FILE} TO JOBS QUEUE [JOBS: ${JOBS}]"
bash ${FILE} &
done
exit 0
测试:
$ grep '' /tmp/file*.sh
/tmp/file01.sh:sleep 8
/tmp/file02.sh:sleep 10
/tmp/file03.sh:sleep 5
/tmp/file04.sh:sleep 10
/tmp/file05.sh:sleep 8
/tmp/file06.sh:sleep 8
$ ./parallel.sh
APPEND /tmp/file01.sh TO JOBS QUEUE [JOBS: 0]
APPEND /tmp/file02.sh TO JOBS QUEUE [JOBS: 1]
APPEND /tmp/file03.sh TO JOBS QUEUE [JOBS: 2]
RUNNING JOBS = 3 => WAIT
APPEND /tmp/file04.sh TO JOBS QUEUE [JOBS: 2]
RUNNING JOBS = 3 => WAIT
APPEND /tmp/file05.sh TO JOBS QUEUE [JOBS: 1]
APPEND /tmp/file06.sh TO JOBS QUEUE [JOBS: 2]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.