在运行python程序时,需要对多个版本或者多个方法的代码进行运行,它们往往需要设置一个系列的参数,然后使用python xxx.py运行该py文件。这种情况往往要做大量重复的没有意义的工作,所以我想通过批量生成运行命令,然后批量跑实验。
    
    
    解决方案:
   
首先我们需要一个批量生成命令的脚本,如下:
from copy import deepcopy
def generate(param_dict):
    count=0
    final=1
    for k,v in param_dict.items():
        count=count+1
        final=final*len(v)
    res=[None]*count
    for i in range(count):
        res[i]=final*[None]
    res_count=0
    res_final=1
    for k,v in param_dict.items():
        command_num=0
        for i in range(res_final):
            for j in range(len(v)):
                if res_count==0:
                    res[0][j]={str(k):str(v[j])}
                else:
                    tmp=deepcopy(res[res_count-1][i])
                    tmp[str(k)]=str(v[j])
                    res[res_count][command_num]=tmp
                    command_num+=1
        res_count=res_count+1
        res_final=res_final*len(v)
    return res[-1]
def command(resdict,num=1,path=" ../../output/"):
    run_sh=open('./run.sh', 'w')
    for i in range(len(resdict)):
        filename=''
        command=''
        for k,v in resdict[i].items():
            if not k.startswith("python"):
                filename+="_"+k.split("-")[-1]+v
            else:
                filename+=v.split('.')[0].split(' ')[1]
            command+=(str(k)+' '+str(v)+' ')
        command+=' >'+path+filename
        for i in range(num):
            run_sh.write(command+"_"+ str(i) + " 2>&1 &\n")
if __name__ == '__main__':
    param={"python":["-u run_cifar_5Tasks.py"],"--lr":[0.1,0.01,0.001],"--drop":[0.0],"--gpu":["3"]}
    res=generate(param)
    command(res,num=5,path=" ../../output/20201103/equal/")
    生成的命令样式见下图:
    
    
    
    这个代码的使用方式很简单,在红框传入你需要的预先设置的参数,生成的命令会是这些参数的全组合。需要注意的是,第一对键值对必须是”python”=”-u xxx.py”,这是运行python文件必须的命令。在黄框设置输出日志文件要保存的位置,
    
     最前面的空格不可少
    
    。
    
    
    
    然后将sh文件传入到服务器,
    
     注意相对路径
    
    。
    
    然后执行该sh文件,即可nohup批量运行程序:
   
nohup sh xxx.sh &
     
   
 
版权声明:本文为qq_35531985原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
