Exemple #1
0
    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')
Exemple #2
0
    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')
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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))
Exemple #6
0
    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))
Exemple #7
0
    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
Exemple #8
0
 def patched_runner(job):
     data = serialize('JOB', job.serialize())
     return self.runner(data)