目前,我有一个驱动程序,它运行数千个“有效负载”程序实例,并对输出进行一些后处理。驱动程序当前使用shell()
函数直接从多个线程调用有效负载程序。 shell()
函数在当前工作目录中执行命令,阻塞直到命令完成运行,并返回由命令发送到stdout的数据。这适用于单个多核计算机。我想修改驱动程序以将qsub
作业提交到大型计算群集,以获得更多并行性。
有没有办法让qsub
命令将其结果输出到stdout而不是文件并阻塞,直到作业完成?基本上,我希望它尽可能像命令的“正常”执行一样,这样我就可以尽可能少地修改我的驱动程序来并行化到集群。
编辑:我认为所有的网格引擎都非常标准化。如果它们不重要而且很重要,我正在使用Torque。
答案 0 :(得分:3)
您没有提及您正在使用的排队系统,但SGE支持“同步”和“排序”。 qsub的选项,这将导致它阻止,直到作业完成或退出。
答案 1 :(得分:2)
在TORQUE中,这是使用-x和-I选项完成的。 qsub -I指定它应该是交互式的,-x表示只运行指定的命令。例如:
qsub -I -x myscript.sh
在myscript.sh完成执行之前,不会返回。
答案 2 :(得分:0)
在PBS中,您可以使用qsub -Wblock=true <command>