def run(self): while True: try: try: ws = NetWorkSpace(self.wsName, self.nwsHost, self.nwsPort, persistent=True) ws.declare(self.varName, FIFO) while True: s = ws.fetch(self.varName) try: # split the request using the first character x = s[1:].split(s[0]) r = {"RSleighNwsHost": self.nwsHost, "RSleighNwsPort": str(self.nwsPort)} r["RSleighNwsName"], r["RSleighUserNwsName"], r["RSleighWorkerCount"], r["RSleighID"], r[ "RSleighWorkingDir" ], r["RSleighWorkerOut"], r["RSleighLogDir"], r["RSleighUserName"] = x self.gotRequest(r) except: # bad request: ignore it pass except NwsServerException: # server is probably down. sleep a bit, and try again time.sleep(10) except NwsOperationException: # maybe someone deleted my variable to signal a shutdown? return finally: # ws may not be defined try: ws.server.close() except: pass ws = None
def __init__(self, nwsHost, nwsPort, nwsName, gotShutdown): threading.Thread.__init__(self, name="Sentinel:" + nwsName) self.nwsHost = nwsHost self.nwsPort = nwsPort self.nwsName = nwsName self.gotShutdown = gotShutdown self.ws = NetWorkSpace(self.nwsName, self.nwsHost, self.nwsPort, useUse=True, create=False)
class Sentinel(threading.Thread): def __init__(self, nwsHost, nwsPort, nwsName, gotShutdown): threading.Thread.__init__(self, name="Sentinel:" + nwsName) self.nwsHost = nwsHost self.nwsPort = nwsPort self.nwsName = nwsName self.gotShutdown = gotShutdown self.ws = NetWorkSpace(self.nwsName, self.nwsHost, self.nwsPort, useUse=True, create=False) def __str__(self): return "%s@%s:%d" % (self.nwsName, self.nwsHost, self.nwsPort) def run(self): try: try: self.ws.find("Sleigh ride over") self.ws.store("bye", "Sleigh ride over") except Exception, e: try: self.ws.store("bye", str(sys.exc_info()[1])) except: pass finally: try: self.gotShutdown(self) except: pass try: self.ws.server.close() except: pass