我使用qsub SubmitJob.sh将作业提交到集群。它运作良好,但需要很长时间才能完成。在SubmitJob.sh内部,有一个for循环,该循环按顺序运行。我想将我的for循环转换为并行作业提交,这样他们每个人都提交一个作业(SubmitJob.sh)。
var entry = new EntityEnviroment
{
env_name = result.environment_status.env_name,
env_country = "Ger",
failedReportDetails = new List<EntityFailedReportDetail>()
};
foreach (var value in result.failed_report_details)
{
var entryDetail = new EntityFailedReportDetail();
entryDetail.report_id = value.report_id;
entryDetail.report_status = value.report_status;
entry.failedReportDetails.Add(entryDetail);
}
答案 0 :(得分:0)
我必须做一两次这样的事情。一般的想法是,提供数组的一部分作为对函数的引用,并将其作为子进程执行。我选择使用平方根作为分隔线,因为工作负载将线性增长到要处理的项目数量。
#! /bin/bash
FILE="FilID.txt"
DATA=($(cat ${FILE}))
AMOUNT=${#DATA[@]}
RANGE=$(echo "sqrt(${AMOUNT})" | bc)
echo ${amount}
echo $range
function _child {
local -n numbers=$1
echo "From ${numbers[0]} to ${numbers[-1]}"
for n in ${numbers[@]}; do echo -n "$n, "; done
echo
}
for ((i=0; i<AMOUNT; i+=RANGE)) {
part=(${DATA[@]:$i:$RANGE})
_child part &
# wait
}
wait
exit 0
您可以通过如下填充FilID.txt来测试脚本。取消注释for循环中的wait
以获取可读的输出。
$ seq 0 98 > FilID.txt
您可能要等到每N个子进程完成后才能开始下一个批处理。回到执行脚本时,负载变得过高,Linux选择终止我们的虚拟开发环境:p
P.S。如果FilID.txt包含带有文件名的空格,则必须设置IFS=$'\n'
或其他内容。