一,任务脚本
下面是一个玩具Python代码,从参数中读取城市和日期信息,在该城市该日期参数下进行数据挖掘
import sys
arg = sys.argv[1]
city,date = arg.split(" ")
print(f"data mining task@{
city}, date={
date}")
python task.py "北京 20200101"
二,提交脚本
这个脚本的关键有三处:
一是使用字符串分割转换成数组来获取参数列表。
二是使用Linux中的&符号开启多进程任务并行执行不同参数的任务。
三是使用FIFO管道在进程间通信来控制并行的任务数量。
#!/bin/bash
#允许同时跑的任务数为THREAD_NUM
THREAD_NUM=3 #todo: revise me
args="""
北京 20200101
上海 20200202
深圳 20200303
广州 20200404
南京 20201001
天津 20200901
武汉 20201101
南昌 20200809
成都 20200901
""" #todo: revise me
#指定分隔符
IFS='
'
array=(${
args})
#定义描述符为9的FIFO管道
mkfifo tmp
exec 9<>tmp
rm -f tmp
#预先写入指定数量的空格符,一个空格符代表一个进程
for ((i=0;i<$THREAD_NUM;i++))
do
echo >&9
done
for arg in ${
array[@]}; do
#控制进程数:读出一个空格字符,如果管道为空,此处将阻塞
read -u9
{
#打印参数
#echo ${arg}
#此行代码指定任务提交方法
python task.py ${
arg} #todo : revise me!
#每执行完一个程序,睡眠3s
sleep 3
#控制进程数:一个任务完成后,写入一个空格字符到管道,新的任务将可以执行
echo >&9
}&
done
wait
echo "\n全部任务执行结束"
sh a_lot_jobs.sh
参考链接:https://cloud.tencent.com/developer/article/1755692