def __init__(self, kill_on_error=0, signal_file='', temp_path='', parent_tid=None, tid=None, debug=False, nfs_care=False): RemoteObjectHandler.__init__(self, kill_on_error, signal_file, debug) ## create watchdog to check every 60 mins whether child processes ## are still alive. self.watchdog = WatchDog(60, debug=debug) self.watchdog.start() self.create_communicator(temp_path, tid, debug, nfs_care) self.parent_tid = parent_tid self.message_id = 0 self.initialize()
class FileBasedRemoteObjectHandler(RemoteObjectHandler): def __init__(self, kill_on_error=0, signal_file='', temp_path='', parent_tid=None, tid=None, debug=False, nfs_care=False): RemoteObjectHandler.__init__(self, kill_on_error, signal_file, debug) ## create watchdog to check every 60 mins whether child processes ## are still alive. self.watchdog = WatchDog(60, debug=debug) self.watchdog.start() self.create_communicator(temp_path, tid, debug, nfs_care) self.parent_tid = parent_tid self.message_id = 0 self.initialize() def create_communicator(self, temp_path, tid, debug, nfs_care): self.communicator = FileBasedCommunicator(temp_path, tid, debug, nfs_care) def send(self, msg, value = None): self.communicator.send(self.parent_tid, msg, value) def recv(self, msg): return self.communicator.recv(self.parent_tid, msg) def initialize(self): """wait for initialization request and initialize accordingly""" print 'Initializing...' tid, msg, vals = self.recv(MSG_INIT) if 'object' in vals: self.set_object(vals['object']) if 'daemon' in vals: self.daemon = vals['daemon'] if 'expiration_time' in vals: self.t_expire = vals['expiration_time'] self.send(MSG_INIT_DONE) print 'Done.' def start(self): """main request management loop. Head node sends commands which this thread will execute""" print 'Ready.' self._terminate = False self.watchdog.set(time.time()) while 1 and not self._terminate: tid, msg, data = self.recv(-1) if msg == MSG_STOP: return if type(data) is not tuple: data = (data,) method = self.bindings[msg] if self.kill_on_error: try: method(*data) self.watchdog.set(time.time()) except: self.send(MSG_CLIENT_CRASHED) sys.exit(0) else: method(*data) self.watchdog.set(time.time()) if not self.debug: print 'Grid has been halted.' sys.exit(0) else: print 'Debugging mode, keeping Python interpreter alive.' def terminate(self, x=None): self._terminate = True