def __init__(self, distributor, ip_address, port, nodeID=computerName.GetComputerName()): NodeServer.__init__(self, distributor, ip_address, port, nodeID=computerName.GetComputerName()) server_address = ('', port) webframework.APIHTTPServer.__init__(self, server_address) self.daemon_threads = True
def run(self): """""" if self._profile: from PYME.util import mProfile mProfile.profileOn([ 'ruleserver.py', ]) profileOutDir = config.get( 'dataserver-root', os.curdir) + '/LOGS/%s/mProf' % computerName.GetComputerName() if self.bind_addr == '': import socket self.externalAddr = socket.gethostbyname(socket.gethostname()) else: self.externalAddr = self.bind_addr self.distributor = WFRuleServer(self.port, bind_addr=self.bind_addr) logger.info('Starting ruleserver on %s:%d' % (self.externalAddr, self.port)) try: self.distributor.serve_forever() finally: self.distributor._do_poll = False #logger.info('Shutting down ...') #self.distributor.shutdown() logger.info('Closing server ...') self.distributor.server_close() if self._profile: mProfile.report(False, profiledir=profileOutDir)
def __init__(self, distributor, ip_address, port, nodeID=computerName.GetComputerName()): self._tasks = Queue.Queue() self._handins = Queue.Queue() self.nodeID = nodeID self.distributor_url = distributor self.ip_address = ip_address self.port = port self.workerIDs = set() self._lastUpdateTime = 0 #self._lastAnnounceTime = 0 #self._anounce_url = self.distributor_url + 'distributor/announce?nodeID=%s&ip=%s&port=%d' % (self.nodeID, self.ip_address, self.port) #cherrypy.engine.subscribe('stop', self.stop) self._do_poll = True self._update_tasks_lock = threading.Lock() self._num_connection_fails = 0 #set up threads to poll the distributor and announce ourselves and get and return tasks self.handinSession = requests.Session() self.pollThread = threading.Thread(target=self._poll) self.pollThread.start() #self.announceSession = requests.Session() #self.announceThread = threading.Thread(target=self._announce_loop) #self.announceThread.start() logger.debug('Starting to poll for tasks') self.taskSession = requests.Session() self.taskThread = threading.Thread(target=self._poll_tasks) self.taskThread.start()
if __name__ == '__main__': import signal port = sys.argv[1] if (len(sys.argv) == 3) and (sys.argv[2] == '-k'): profile = True from PYME.util import mProfile mProfile.profileOn([ 'ruleserver.py', ]) profileOutDir = config.get( 'dataserver-root', os.curdir) + '/LOGS/%s/mProf' % computerName.GetComputerName() else: profile = False profileOutDir = None if not sys.platform == 'win32': #windows doesn't support handling signals ... don't catch and hope for the best. #Note: This will make it hard to cleanly shutdown the distributor on Windows, but should be OK for testing and #development signal.signal(signal.SIGHUP, on_SIGHUP) try: run(int(port)) finally: if profile: mProfile.report(False, profiledir=profileOutDir)