Source code for issm.waitonlock

import os
from socket import gethostname
import time
import MatlabFuncs as m

[docs]def waitonlock(md): """ WAITONLOCK - wait for a file This routine will return when a file named 'filename' is written to disk. If the time limit given in input is exceeded, return 0 Usage: flag=waitonlock(md) """ #Get filename (lock file) and options executionpath=md.cluster.executionpath cluster=md.cluster.name login=md.cluster.login port=md.cluster.port timelimit=md.settings.waitonlock filename=os.path.join(executionpath,md.private.runtimename,md.miscellaneous.name+'.lock') #waitonlock will work if the lock is on the same machine only: if not m.strcmpi(gethostname(),cluster): print 'solution launched on remote cluster. log in to detect job completion.' choice=raw_input('Is the job successfully completed? (y/n) ') if not m.strcmp(choice,'y'): print 'Results not loaded... exiting' flag=0 else: flag=1 #job is running on the same machine else: if 'interactive' in vars(md.cluster) and md.cluster.interactive: #We are in interactive mode, no need to check for job completion flag=1 return flag #initialize time and file presence test flag etime=0 ispresent=0 print "waiting for '%s' hold on... (Ctrl+C to exit)" % filename #loop till file .lock exist or time is up while ispresent==0 and etime<timelimit: ispresent=os.path.exists(filename) time.sleep(1) etime+=1/60 #build output if etime>timelimit: print 'Time limit exceeded. Increase md.settings.waitonlock' print 'The results must be loaded manually with md=loadresultsfromcluster(md).' raise RuntimeError('waitonlock error message: time limit exceeded.') flag=0 else: flag=1 return flag