如何在 Python 中判断我是否在 Beowulf 集群上 运行?
How to tell in Python if I am running on a Beowulf cluster?
我有一个程序 运行 在许多不同的机器上,包括一个集群。目前,我通过查找计算机的 hostname 来检查我是否在集群上,如果它是集群的名称,我将分布式元素添加到程序中,即 pestat 和 qsub 调用。我正在努力使程序更便携,但卡在了这里。
有没有一种直接的方法来检查是否附加了从节点,或者附加了多少?我搜索了很多标准模块,包括 os、sys、socket、platform,但没有找到我可以使用的东西。我考虑过在 运行ning pestat 周围使用 try/except 块,但我觉得应该有更好的东西。
编辑:郑重声明,我愿意使用 linux/bash 解决方案,或者查找表明我是否在集群上的环境变量。
我要用这个解释来跳转一下。让我知道我是否超出了请求。根据您的描述,听起来您正在使用 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...
这允许你做一些更复杂的逻辑。例如检测集群是关闭还是启动。如果我们在路径中有命令但它们返回连接错误,您可能不想提交,例如"connection rejected".
2) 在每个系统上,您可以编写自己的 python 模块并尝试通过脚本导入它。如果失败,那么您就知道您使用的是正常系统。这可以通过 puppet 进行管理并相应地分发。
我有一个程序 运行 在许多不同的机器上,包括一个集群。目前,我通过查找计算机的 hostname 来检查我是否在集群上,如果它是集群的名称,我将分布式元素添加到程序中,即 pestat 和 qsub 调用。我正在努力使程序更便携,但卡在了这里。
有没有一种直接的方法来检查是否附加了从节点,或者附加了多少?我搜索了很多标准模块,包括 os、sys、socket、platform,但没有找到我可以使用的东西。我考虑过在 运行ning pestat 周围使用 try/except 块,但我觉得应该有更好的东西。
编辑:郑重声明,我愿意使用 linux/bash 解决方案,或者查找表明我是否在集群上的环境变量。
我要用这个解释来跳转一下。让我知道我是否超出了请求。根据您的描述,听起来您正在使用 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...
这允许你做一些更复杂的逻辑。例如检测集群是关闭还是启动。如果我们在路径中有命令但它们返回连接错误,您可能不想提交,例如"connection rejected".
2) 在每个系统上,您可以编写自己的 python 模块并尝试通过脚本导入它。如果失败,那么您就知道您使用的是正常系统。这可以通过 puppet 进行管理并相应地分发。