在运行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 版权协议,转载请附上原文出处链接和本声明。