Python HTCondor:基于SysExitCode重新提交作业或终止作业

Python HTCondor:基于SysExitCode重新提交作业或终止作业,python,condor,Python,Condor,我目前正在将作业提交到具有多台计算机的外部服务器,并且我一直在使用当前的submit_文件(如下所示)提交作业,如果作业被逐出(由于服务器设置),则重新提交作业,并将作业不运行的所有计算机列入黑名单 executable = /usr/bin/python3 arguments = ~/main.py JobBatchName = test # Event, out and error logs log = ~/logs/c$(cluster).p$(process).log out

我目前正在将作业提交到具有多台计算机的外部服务器,并且我一直在使用当前的
submit_文件
(如下所示)提交作业,如果作业被逐出(由于服务器设置),则重新提交作业,并将作业不运行的所有计算机列入黑名单

executable = /usr/bin/python3
arguments  = ~/main.py

JobBatchName = test

# Event, out and error logs
log    = ~/logs/c$(cluster).p$(process).log
output = ~/logs/c$(cluster).p$(process).out
error  = ~/logs/c$(cluster).p$(process).error

should_transfer_files = YES
requirements = (CUDAGlobalMemoryMb > 6000) && (CUDAGlobalMemoryMb <  16000) && \
               (CUDACapability > 3.0) && (CUDADriverVersion >= 11) 
     
# Resources
request_GPUs     = 1
request_CPUs     = 1
request_memory   = 4G

on_exit_remove = (ExitCode == 0)
job_machine_attrs = Machine   
job_machine_attrs_history_length = 10
requirements = $(requirements) && (target.machine =!= MachineAttrMachine1) && (target.machine =!= MachineAttrMachine2)

# Queue commands
queue
executable=/usr/bin/python3
参数=~/main.py
JobBatchName=测试
#事件、输出和错误日志
log=~/logs/c$(集群).p$(进程).log
output=~/logs/c$(集群).p$(进程).out
error=~/logs/c$(集群).p$(进程).error
是否应传输文件=是
要求=(CUDAGlobalMemoryMb>6000)和&(CUDAGlobalMemoryMb<16000)和\
(CUDACapability>3.0)和(CUDADriverVersion>=11)
#资源
请求\GPU=1
请求\u CPU=1
请求内存=4G
在退出时删除=(退出代码==0)
作业\机器\属性=机器
作业\机器\属性\历史\长度=10
需求=$(需求)&&(target.machine=!=MachineAttrMachine1)&&(target.machine=!=MachineAttrMachine2)
#队列命令
队列
我提交的脚本只是一个python脚本,其中有一个for循环,它将循环直到完成。但是,作业可能会被中断,并在完成之前从特定机器启动(由于时间限制),因此我有一个检查点系统,并修改了
submit\u文件
,以重新提交该文件,并且我的python脚本将从停止的位置自动恢复

然而,在某些情况下,作业将根据
condor_q
运行,但当我检查自己的python脚本中的任何检查点文件时,什么都没有。因此,HTCondor说作业正在给定的机器上运行,而我的代码(将输出检查点文件以证明它正在运行)不存在,表明作业实际上还没有开始通过上述for循环运行

我确实有办法检查作业是否正在实际运行,并且可以通过
sys.exit()
终止程序。然而,这会将其替换回队列中,而作业只是卡在一个永远不会结束的循环中

这是我的问题,有没有办法让
submit\u文件
根据条件完成两件不同的事情?因此,例如,如果系统引导作业,则重新对其进行排序,并将给定的机器列入黑名单(就像我在当前的
submit_文件
script中所做的那样),但如果我的python脚本返回给定的错误,则杀死作业,而不重新排序作业。我假设这可以通过sys.exit()和给定的数字代码来完成,然后将其读入
submit\u文件
脚本中,但这超出了我对HTCondor的了解,因为我是这个作业调度的新手

感谢您的帮助!谢谢!:)