def run(self): self.running = True self.register() self.pinger.start() while self.running and not self.pinger.unresponsive: try: events = dict(self.poller.poll(self.timeout)) except zmq.ZMQError: break for socket in events: msg = unserialize(socket.recv()) if msg[0] == 'JOB': # do the job and send the result start = time.time() try: res = self.target(msg[1:]) except Exception, e: # XXX log the error res = str(e) logger.debug('%.6f' % (time.time() - start)) socket.send(serialize("JOBRES", msg[1], res)) else: socket.send('ERROR')
def run(self): self.running = True self.register() self.pinger.start() while self.running and not self.pinger.unresponsive: try: events = dict(self.poller.poll(self.timeout)) except zmq.ZMQError: break for socket in events: msg = unserialize(socket.recv()) logger.debug(msg) if msg[0] == 'JOB': # do the job and send the result start = time.time() try: res = self.target(msg[1:]) except Exception, e: # XXX log the error res = str(e) logger.debug('%.6f' % (time.time() - start)) socket.send(serialize("JOBRES", msg[1], res)) else: socket.send('ERROR')
def _msg(self, req, rep): self.pinger.disable() try: with self.locker: poller = zmq.Poller() poller.register(self.master, zmq.POLLIN) # ping the master we are online, with an ID try: data = serialize(req, self.identity) self.master.send(data, zmq.NOBLOCK) except zmq.ZMQError, e: raise RegisterError(str(e)) try: events = dict(poller.poll(self.timeout)) except zmq.ZMQError, e: raise RegisterError(str(e)) if events == {}: raise RegisterError("Nothing came back") else: for socket in events: res = socket.recv() if res != rep: raise RegisterError(res)
def _execute(self, job_id, job_data, timeout=1.): worker = None timeout *= 1000. # timeout is in ms data = serialize("JOB", str(job_id), job_data) try: with self.workers.worker() as worker: try: worker.send(data, zmq.NOBLOCK) except zmq.ZMQError, e: raise ExecutionError(str(e)) poller = zmq.Poller() poller.register(worker, zmq.POLLIN) try: events = dict(poller.poll(timeout)) except zmq.ZMQError, e: raise ExecutionError(str(e)) if events == {}: raise TimeoutError() for socket in events: try: msg = unserialize(socket.recv()) except zmq.ZMQError, e: raise ExecutionError(str(e)) if msg[0] == 'JOBRES': # we got a result return msg[-1] else: raise NotImplementedError(str(msg))
def run(self): self.running = True num_failed = 0 while self.running: if num_failed >= self.max_fails: self.unresponsive = True self.running = False break if self.disabled: time.sleep(1.) continue with self.locker: try: data = serialize('PING', self.identity) logger.debug('[pinger] Pinging with ' + data) self.socket.send(data, zmq.NOBLOCK) except zmq.ZMQError, e: num_failed += 1 logger.debug('[pinger] ' + str(e)) continue try: events = dict(self.poller.poll(self.duration * 1000)) except zmq.ZMQError, e: self.num_failed += 1 logger.debug('[pinger] ' + str(e)) continue if len(events) == 0: logger.debug('[pinger] ' + 'no pong!') self.fail_callable() num_failed += 1 else: for socket in events: res = socket.recv() logger.debug('[pinger] ' + 'got ' + res) if res != 'PONG': self.running = False self.fail_callable() num_failed += 1
def patched_runner(job): data = serialize('JOB', job.serialize()) return self.runner(data)