如何在Python中告诉我是否在Beowulf集群上运行?

时间:2015-03-25 19:22:42

标签: python linux cluster-computing

我有一个程序,我在许多不同的机器上运行,包括一个集群。目前,我通过查找计算机的主机名来检查我是否在群集上,如果它是群集的名称,我将分布式元素添加到程序中,即pestat和qsub调用。我试图让程序更便携,而且我被困在这里。

是否有直接的方法来检查是否连接了从属节点,或者连接了多少个节点?我搜索了许多标准模块,包括os,sys,socket,platform,还没找到任何我可以使用的模块。我考虑过使用try / except块来运行野生动物,但我觉得应该有更好的东西。

编辑:为了记录,我愿意使用linux / bash解决方案,或者查找环境变量,如果我在群集上的话。

1 个答案:

答案 0 :(得分:2)

我会用这个解释稍微跳一下。如果我超出要求,请告诉我。根据您的描述,听起来您使用的是TORQUE或PBSpro。鉴于目前没有支持通过python检测集群,你可以:

1)检查二进制文件的路径。这意味着该脚本不再依赖于主机。

#!/usr/bin/env python

import re
import subprocess

    command_to_run = "qstat -q"

    p = subprocess.Popen(command_to_run, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
        output, error = p.communicate()
    match = re.search(r'command not found', error)
    if match:
        """something...
    match = re.search(r'Queue', output)
    if match:
        """something else...

这允许您执行一些更复杂的逻辑。例如,检测群集是否已关闭或已启动。如果我们在路径中有命令但是它们返回连接错误,则可能不想提交,例如"连接被拒绝"。

2)在每个系统上,您可以编写自己的python模块并尝试通过脚本导入它。如果失败,那么您就知道自己处于正常系统中。这可以通过木偶进行管理并相应地分发。