我的任务是:
- 我有一个用 Python 编写的程序,它以一组变量(A,B,C)作为输入,并输出两个数字(X,Y)。
- 我想在大范围的输入(A、B、C)上运行这个程序
- 我将使用给定的变量集运行程序称为“运行实验”
- 我正在使用集群来执行此操作(我在 SLURM 中提交我的作业)
- 然后,我想将实验结果保存到单个文件中,例如具有 [A|B|C|X|Y] 列的数据框,其中每一行是不同实验的输出。
我现在的情况是:
我以以下形式编写了我的程序:
import io from optparse import OptionParser parser = OptionParser() parser.add_option("-f", "--file",action="store", type="string", dest="filename") parser.add_option("-a", "--input_a",type="int", dest="a") parser.add_option("-b", "--input_b",type="int", dest="b") parser.add_option("-c", "--input_c",type="int", dest="c") (options, args) = parser.parse_args() def F(a,b,c): return((a+b, b+c)) Alice = options.input_a Bob = options.input_b Carol = options.input_c with io.open("results_a_{0}_b_{1}_c_{2}.txt".format(Alice, Bob, Carol), "a") as f: (x,y) = F(Alice, Bob, Carol) f.write(u"first output = {0}, second output = {1}".format(x,y))
这允许我运行程序一次,并将结果保存在一个文件中。
- 原则上,然后我可以针对 (A,B,C) 范围提交此作业,获取大量带有结果的文本文件,然后尝试将它们聚合到单个文件中。
- 但是,我认为这不是处理事情的最佳方式。
我想知道的是:
- 我有没有更自然的方法来运行这些实验并将结果全部保存在一个文件中,如果有,它是什么?
- 我应该如何在 SLURM 上提交我的工作集合?
- 我目前正在(有效地)提交下面的脚本,但它并没有真正起作用:
...
for a in 1 2 3; do
for b in 10 20 30; do
for c in 100 200 300; do
python toy_experiment.py -a $a -b $b -c $c &
done
done
done
wait
[我担心这里可能还有很多其他地方出错了-我愿意使用 optparse 以外的其他方法将参数传递给我的程序,以不同的方式保存结果等-我的主要目标是一个可行的解决方案。]