Public Access
67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
import os
|
|
import os.path
|
|
import shutil
|
|
from damaris.experiments import Experiment
|
|
|
|
class ExperimentWriter:
|
|
"""
|
|
writes experiments in propper way to spool directory
|
|
"""
|
|
def __init__(self, spool, no=0, job_pattern="job.%09d", inform_last_job=None):
|
|
self.spool=spool
|
|
self.job_pattern=job_pattern
|
|
self.no=no
|
|
self.inform_last_job=inform_last_job
|
|
# test if spool exists
|
|
if not os.path.isdir(spool):
|
|
os.mkdir(spool)
|
|
|
|
def send_next(self, job, quit=False):
|
|
"""
|
|
"""
|
|
if quit and self.inform_last_job is not None:
|
|
self.inform_last_job.stop_no=self.no
|
|
self.inform_last_job=None
|
|
job.job_id=self.no
|
|
job_filename=os.path.join(self.spool,self.job_pattern%self.no)
|
|
f=open(job_filename+".tmp","w")
|
|
f.write(job.write_xml_string())
|
|
f.flush()
|
|
f.close() # explicit close under windows necessary (don't know why)
|
|
del f
|
|
# this implementation tries to satisfiy msvc filehandle caching
|
|
os.rename(job_filename+".tmp", job_filename)
|
|
#shutil.copyfile(job_filename+".tmp", job_filename)
|
|
#try:
|
|
# os.unlink(job_filename+".tmp")
|
|
#except OSError:
|
|
# print "could not delete temporary file %s.tmp"%job_filename
|
|
|
|
self.no+=1
|
|
|
|
def __del__(self):
|
|
if self.inform_last_job is not None:
|
|
self.inform_last_job.stop_no=self.no-1
|
|
self.inform_last_job=None
|
|
|
|
class ExperimentWriterWithCleanup(ExperimentWriter):
|
|
"""
|
|
writes experiments and cleans up in front of queue
|
|
"""
|
|
def __init__(self, spool, no=0, job_pattern="job.%09d", inform_last_job=None):
|
|
ExperimentWriter.__init__(self, spool, no, job_pattern, inform_last_job=inform_last_job)
|
|
self.delete_no_files(self.no)
|
|
|
|
def send_next(self, job, quit=False):
|
|
self.delete_no_files(self.no+1)
|
|
ExperimentWriter.send_next(self,job,quit)
|
|
|
|
def delete_no_files(self,no):
|
|
"""
|
|
delete everything with this job number
|
|
"""
|
|
filename=os.path.join(self.spool,(self.job_pattern%no))
|
|
if os.path.isfile(filename): os.unlink(filename)
|
|
if os.path.isfile(filename+".tmp"): os.unlink(filename+".tmp")
|
|
if os.path.isfile(filename+".result"): os.unlink(filename+".result")
|