aboutsummaryrefslogtreecommitdiff
path: root/utils/submit-grid-jobs
diff options
context:
space:
mode:
authortlatorre <tlatorre@uchicago.edu>2020-04-13 17:18:52 -0500
committertlatorre <tlatorre@uchicago.edu>2020-04-13 17:18:52 -0500
commiteee7dfa1dd0927af1043a1a3836b7e1aa136946f (patch)
tree5d0bfd6ce4211d3eded9c0a5f6497a309acbc2f2 /utils/submit-grid-jobs
parent6f61c532e51b8c91519e5e8d38779e358cf1bc76 (diff)
downloadsddm-eee7dfa1dd0927af1043a1a3836b7e1aa136946f.tar.gz
sddm-eee7dfa1dd0927af1043a1a3836b7e1aa136946f.tar.bz2
sddm-eee7dfa1dd0927af1043a1a3836b7e1aa136946f.zip
speed up submit-grid-jobs a lot by only calling condor_q once
Diffstat (limited to 'utils/submit-grid-jobs')
-rwxr-xr-xutils/submit-grid-jobs27
1 files changed, 19 insertions, 8 deletions
diff --git a/utils/submit-grid-jobs b/utils/submit-grid-jobs
index de022e1..8f54c1e 100755
--- a/utils/submit-grid-jobs
+++ b/utils/submit-grid-jobs
@@ -394,7 +394,7 @@ def release_job(submit_file):
return -1
-def get_job_status(submit_file):
+def get_job_status(submit_file, data=None):
"""
Check to see if a given grid job is finished. Returns the following statuses:
@@ -412,16 +412,20 @@ def get_job_status(submit_file):
http://pages.cs.wisc.edu/~adesmet/status.html.
"""
log.debug("condor_q -json")
- output = check_output(["condor_q","-json","--attributes","SubmitFile,JobStatus"])
head, tail = split(submit_file)
- if output:
- data = json.loads(output)
+ if data is None:
+ output = check_output(["condor_q","-json","--attributes","SubmitFile,JobStatus","--constraint",'SubmitFile == "%s"' % tail])
- for entry in data:
- if entry['SubmitFile'] == tail:
- return entry['JobStatus']
+ if output:
+ data = json.loads(output)
+ else:
+ data = []
+
+ for entry in data:
+ if entry['SubmitFile'] == tail:
+ return entry['JobStatus']
# If there's no entry from condor_q the job is done. Now, we check to see
# if it completed successfully. Note: Jobs often don't complete
@@ -482,6 +486,13 @@ def main(conn, dqxx_dir, max_retries, max_jobs):
stats = {}
+ output = check_output(["condor_q","-json","--attributes","SubmitFile,JobStatus"])
+
+ if output:
+ data = json.loads(output)
+ else:
+ data = []
+
for id, filename, run, uuid, gtid, particle_id, max_time, state, nretry, submit_file in results.fetchall():
if state not in stats:
stats[state] = 1
@@ -505,7 +516,7 @@ def main(conn, dqxx_dir, max_retries, max_jobs):
c.execute("UPDATE state SET state = 'RUNNING', submit_file = ?, nretry = ? WHERE id = ?", (abspath(submit_file),0,id))
elif state == 'RUNNING':
# check to see if it's completed
- job_status = get_job_status(submit_file)
+ job_status = get_job_status(submit_file, data=data)
if job_status in (0,1,2,4):
# nothing to do!