def run(host, port, seed) : smds.initialize(False, seed=seed) # Connect to parent parent.connect((host,port)) while (True) : mx.acquire() (r,w,e) = select([parent],[],[],0) if len(r) : packet = smds.recvMsg(parent) if not packet : mx.release() parent.close() smds.shutdown() exit("Error reading from parent.") (msg, args) = packet if (msg > maxHandler) : h = nullHandler args = (msg,)+args else : h = handlers[msg] h(*args) checkTime() mx.release() sleep(1)
def run() : global theSocket, theThread from atexit import register from sys import exit from signal import signal, SIGTERM register(shutdown) signal(SIGTERM, lambda x,y: exit() ) try : from signal import SIGBREAK signal(SIGBREAK, lambda x,y : exit()) except : pass loadHosts() s = theSocket s.bind(('', FOUNDRY_PORT)) s.listen(5) theThread = threading.Thread(None, bkg, "SMDS Foundry Background Thread") theThread.setDaemon(True) theThread.start() while True: try : (c, addr) = s.accept() except : pass else : # got a new connection c.setblocking(1) packet = smds.recvMsg(c) if packet : (msg, args) = packet if msg == smds.messages['QUIT'] : quit() if msg == 3 or msg == 7 : args = (c,)+args if msg > maxHandler : h = nullHandler args = (msg,)+args else : h = handlers[msg] try : h(*args) except : smds.msg("Bad message from %s" % addr[0], smds.MSG_WARN) from traceback import format_exc print format_exc() if msg == smds.messages['RELEASE'] : quit() else : smds.msg("Bad connection from %s" % addr[0], smds.MSG_WARN) if len(myMasters) : work.set() else : work.clear() if platform != 'win32' : cleanChildren()
def processMessages() : (r,w,e) = select([theFoundry]+[ b['socket'] for b in bees ], [],[], 1.0) for s in r : packet = smds.recvMsg(s) b = None if s != theFoundry : b = [ b for b in bees if b['socket'] == s ][0] if not packet : if s == theFoundry : raise "Local foundry went down!" else : remoteDead(b) continue (msg, args) = packet if msg > maxHandler : h = nullHandler args = (msg,)+args else : h = handlers[msg] if b : args = (b,)+args h(*args)
def retrieveData(name) : smds.msg("Requesting <%s> from parent." % name, smds.MSG_DBUG) try : smds.sendMsg(theSocket, smds.messages['INTENS'], name) packet = smds.recvMsg(theSocket) if not packet : theSocket.close() exit("Error reading from parent.") (msg, args) = packet if msg == smds.messages['QUIT'] : quit() if msg != smds.messages['INTENS'] : smds.msg("Unknown message from parent: %s.\nGiving up." % str(msg, args), smds.MSG_WARN) quit() if args[0] != name : smds.msg("Unknown data <%s> from parent. Giving up.", smds.MSG_WARN) quit() except : from traceback import format_exc smds.msg("Error retrieving data <%s> from master." % name, smds.MSG_WARN) print format_exc() exit() return args[1]
def run(host, port) : global theSocket if platform == 'win32' : from win32process import GetCurrentProcess, SetPriorityClass, \ IDLE_PRIORITY_CLASS SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS) else : from os import nice nice(15) from atexit import register from signal import signal, SIGTERM from sys import exit register(shutdown) signal(SIGTERM, lambda x,y : exit() ) if platform == 'win32' : from signal import SIGBREAK signal(SIGBREAK, lambda x,y : exit() ) # Connect to parent smds.verbosity = smds.MSG_DBUG theSocket = socket.socket() theSocket.connect((host,port)) while (True) : (r,w,e) = select([theSocket],[],[],0) if len(r) : packet = smds.recvMsg(theSocket) if not packet : theSocket.close() exit("Error reading from parent.") (msg, args) = packet if (msg > maxRemoteHandler) : h = nullHandler args = (msg,)+args else : h = remoteHandlers[msg] h(*args)
def processMessages() : activity = False while 1 : (r,w,e) = select([theFoundry]+[ b['socket'] for b in bees ], [],[],0) for s in r : packet = smds.recvMsg(s) b = None if s != theFoundry : try : b = [ b for b in bees if b['socket'] == s ][0] except : smds.msg("Trashing message from %s." % s.getpeername()[0], smds.MSG_WARN) continue if not packet : if s == theFoundry : smds.msg("Local foundry went down!", smds.MSG_WARN) from thread import interrupt_main interrupt_main() clear.set() halt.set() mx.release() raise "Local foundry went down!" else : remoteDead(b) continue (msg, args) = packet if msg > maxHandler : h = nullHandler args = (msg,)+args else : h = handlers[msg] if b : args = (b,)+args h(*args) if len(r) : activity = True else : break return activity