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_MEMORYrequest_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库方式能获取更完整的作业属性,但需要确保执行环境已安装htcondorPython包;- 两种方式都能拿到宏展开后的最终值,无需依赖原始提交文件。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

