它是非常有意义的,虽然我会去另一个解决方案。
据我所知,你有程序#1,它决定你的50,000个文件中的哪一个需要由程序#2计算。 程序#1和#2都是用Python编写的。很棒的选择。
如果您运行的是相同的qsub系统,因为我有(不知道我们的叫法),您不能使用的命令参数提交的脚本。相反,任何选项都通过-v选项,将其放入环境变量,例如:
[[email protected] ~] $ python isprime.py 1
1: True
[[email protected] ~] $ head -n 5 isprime.py
#!/usr/bin/python
### This is a python script ...
import os
os.chdir(os.environ.get('PBS_O_WORKDIR','.'))
[[email protected] ~] $ qsub -v isprime='1 2 3' isprime.py
123456.cluster.control.com
[[email protected] ~]
这里,isprime.py可以使用处理命令行参数提交。然后,您只需检查脚本是否作为提交的作业运行,然后从环境变量(os.environ)中检索所述参数。
当程序#2被修改为在集群上运行,程序#1可以通过使用subprocess.call(['qsub','-v options=...','programme2.py'], shell=FALSE)
另一种方法是将队列中的所有文件在数据库中(比如说,一个SQLite数据库)提交作业。然后,您可以让程序#1检查数据库中所有未处理的条目,确定结果(运行,不运行,使用特殊选项运行)。 您现在有机会在群集上并行运行程序#2,该程序仅检查数据库以分析要分析的文件。
编辑:当程序#2是一个可执行
取而代之的是python脚本,我们使用一个bash脚本,它的环境变量,并把他们的程序的命令行:
#!/bin/bash
cd .
# put options into context/flags etc.
if [ -n $option1 ]; then _opt1="--opt1 $option1"; fi
# we can even define our own defaults
_opt2='--no-verbose'
if [ -n $opt2 ]; then _opt2="-o $opt2"; fi
/path/to/exe $_opt1 $opt2
如果您正在寻找数据库解决方案,则需要一个python脚本来检查数据库中未处理的文件,将文件标记为正在处理(在单个事务中执行这些操作),获取选项,完成后调用可执行文件subprocess,将文件标记为完成,检查新文件等c。