0

使用 Grid Engine 之子的 DRMAA 接口我想获取运行特定作业的主机的名称。我想要以下内容(使用drmaa-python界面)

>>> import drmaa
>>> s = drmaa.Session()
>>> s.initialize()

>>> jt = s.createJobTemplate()
>>> jt.remoteCommand = 'sleep'
>>> jt.args = ['100']

>>> jobid = s.runJob(jt)
>>> jobid
'1'
>>> s.jobStatus(jobid)
'running'

>>> s.the_function_I_want(jobid)
'worker-host-123'

问题

  1. 这可以通过 DRMAA 界面实现吗?看规格似乎不是,但我想我还是会问
  2. 如果是这样,怎么做?
4

1 回答 1

0

简短的回答:你是对的,这是不可能的。

长答案:

drmaa-python库充当 DRMAAv1 API 的底层 C 实现的包装器(请参阅https://www.ogf.org/documents/GFD.130.pdf)。这样的 C 库通常与您的集群框架一起提供。DRMAAv1 不支持对作业的标准化监控,因此 DRMAAv1 C 和 Python 库都无法获取此信息。

如果您想知道缺少功能,请注意原始 API 设计是 2004 年的。

DRMAA 的第二个版本 ( https://www.ogf.org/documents/GFD.231.pdf ) 确实支持监控。在撰写本文时,唯一已知的实现来自 Univa GridEngine,并且没有针对它的现有 Python 包装器实现。

您可以尝试自己解析作业日志文件以提取执行主机名。如果您需要传递特殊选项来qsub获取此类文件,您可以使用nativeSpecification作业模板中的字段。

于 2017-03-01T21:33:34.007 回答