[Bash shell] 纯文本查看 复制代码#! /bin/bash
##########################################################################################################
#part1:defile your job(第一部分,定义单核任务,需要根据你的实用任务改动)
date >>time
Nproc=40 #prcocess used here (要用的线程数)
ls *ligand.mol2 >list #list of jobs (所有的任务放到一个list里面)
Njob=$(echo $(cat list|wc -l)+1|bc) #total jobs+1 (统计总任务数目)
function jobrun #define your job (定义一个函数任务)
{
j=$(cat list|sed -n "$1"p|cut -c 1-4) #$1 is a parameter for jobid ($1作为函数输入 即任务号 这里首先要找到任务号对应的分子)
prepare_dpf42.py -l $j"_ligand.pdbqt" -r $j"_receptor.pdbqt" -o tmp2 #(为了简单期间这里没有写如何计算格子 如何计算格点文件 这里是从准备dpf文件开始)
autodock4 -p $j.dpf -l $j.dlg #(对接)
}
##############################################################################################################
#part2:mutiple process framwork (第二部分,多线程框架,可以不用懂不用改动)
PID=() #PID is an array to store the pid of your job (PID 用于储存每个线程的pid)
for ((i=1;i
do
for ((Ijob=0; Ijob
do
if [[ $i -ge $Njob ]]; #(如果任务都完成了就退出循环)
then
break;
fi
if [[ ! "${PID[Ijob]}" ]] || ! kill -0 ${PID[Ijob]} 2> /dev/null; then #(如果线程没有被占用)
echo start $i with $Ijob
jobrun $i $Ijob& #(用Ijob线程执行任务i)
PID[Ijob]=$! #(任务完成 释放线程Ijob)
i=$((i+1))
fi
done
##########################################################################################
wait #(等所有线程都空闲下来)
done
echo job finished!
date >>time