You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTCondor:通过condor_submit启动的Python程序能否获取所有描述符值?

HTCondor任务中获取提交文件展开后描述符值的方法

提交文件示例

executable = /path/to/myexecutable
error = test.err
output = test.out
log = test.log
request_memory = 1024
request_cpus = 1
queue

Python执行程序示例

#!/usr/bin/env python

import htcondor

# 此处需要编写代码获取描述符的值,例如'request_memory'对应的1024

问题

当通过condor_submit提交并由HTCondor启动该执行程序后,是否存在方法可以获取提交文件中所有描述符的值(包括宏展开后的值,因此直接解析提交文件无法实现)?

解决方案

当然可以,HTCondor提供了两种可靠的方式获取这些展开后的属性值:

方法一:读取环境变量

HTCondor会把所有展开后的作业描述符自动转换为以_CONDOR_为前缀的环境变量,直接传递给执行程序。比如:

  • request_memory对应_CONDOR_REQUEST_MEMORY
  • request_cpus对应_CONDOR_REQUEST_CPUS

Python中直接通过os.environ读取即可:

#!/usr/bin/env python
import os

# 获取request_memory的值
mem = os.environ.get("_CONDOR_REQUEST_MEMORY")
# 获取request_cpus的值
cpus = os.environ.get("_CONDOR_REQUEST_CPUS")

print(f"request_memory: {mem}")
print(f"request_cpus: {cpus}")

方法二:使用htcondor库查询作业属性

通过htcondor库可以直接从HTCondor调度器获取当前运行作业的完整属性集,包含所有展开后的描述符:

#!/usr/bin/env python
import os
import htcondor

# 连接到本地调度器
schedd = htcondor.Schedd()
# 根据当前作业的ClusterId和ProcId查询属性
job_ad = schedd.query(
    constraint=f"ClusterId == {os.environ['_CONDOR_CLUSTER']} && ProcId == {os.environ['_CONDOR_PROCESS']}",
    projection=["request_memory", "request_cpus", "executable"]
)[0]

# 打印获取到的属性
print(f"request_memory: {job_ad['request_memory']}")
print(f"request_cpus: {job_ad['request_cpus']}")
print(f"executable: {job_ad['executable']}")

注意点

  • 环境变量方式更轻量,适合快速获取常用属性;
  • htcondor库方式能获取更完整的作业属性,但需要确保执行环境已安装htcondor Python包;
  • 两种方式都能拿到宏展开后的最终值,无需依赖原始提交文件。

内容的提问来源于stack exchange,提问作者Vince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:05:16