示例#1
0
class SocketWorker(threadutil.Thread):
    """worker thread to process requests"""
    def __init__(self, server, callback):
        super(SocketWorker, self).__init__()
        self.setDaemon(True)
        self.server = server
        self.callback = callback
        if os.name == "java":
            # jython names every thread 'Thread', so we improve that a little
            self.setName("Thread-%d" % id(self))

    def run(self):
        self.running = True
        try:
            log.debug("new worker %s", self.getName())
            while self.running:  # loop over all connections in the queue
                self.csock, self.caddr = self.server.workqueue.get()
                if self.csock is None and self.caddr is None:
                    # this was a 'stop' sentinel
                    self.running = False
                    break
                log.debug("worker %s got a client connection %s",
                          self.getName(), self.caddr)
                self.csock = SocketConnection(self.csock)
                if self.handleConnection(self.csock):
                    self.server.threadpool.updateWorking(
                        1)  # tell the pool we're working
                    try:
                        while self.running:  # loop over all requests during a single connection
                            try:
                                self.callback.handleRequest(self.csock)
                            except (socket.error, ConnectionClosedError):
                                # client went away.
                                log.debug("worker %s client disconnected %s",
                                          self.getName(), self.caddr)
                                break
                        self.csock.close()
                    finally:
                        # make sure we tell the pool that we are no longer working
                        self.server.threadpool.updateWorking(-1)
        # Note: we don't swallow exceptions here anymore because @Pyro.callback doesn't
        #       do anything anymore if we do (the re-raised exception would be swallowed...)
        #except Exception:
        #    exc_type, exc_value, _ = sys.exc_info()
        #    log.warn("swallow exception in worker %s: %s %s",self.getName(),exc_type,exc_value)
        finally:
            self.server.threadpool.remove(self)
            log.debug("stopping worker %s", self.getName())

    def handleConnection(self, conn):
        try:
            if self.callback.handshake(conn):
                return True
        except (socket.error, PyroError):
            x = sys.exc_info()[1]
            log.warn("error during connect: %s", x)
            conn.close()
        return False
class SocketWorker(threadutil.Thread):
    """worker thread to process requests"""
    def __init__(self, server, callback):
        super(SocketWorker, self).__init__()
        self.setDaemon(True)
        self.server = server
        self.callback = callback

    def run(self):
        self.running = True
        try:
            log.debug("worker %s waiting for work", self.getName())
            while self.running:  # loop over all connections in the queue
                self.csock, self.caddr = self.server.workqueue.get()
                if self.csock is None and self.caddr is None:
                    # this was a 'stop' sentinel
                    self.running = False
                    break
                log.debug("worker %s got a client connection %s",
                          self.getName(), self.caddr)
                self.csock = SocketConnection(self.csock)
                if self.handleConnection(self.csock):
                    while self.running:  # loop over all requests during a single connection
                        try:
                            self.callback.handleRequest(self.csock)
                        except (socket.error, ConnectionClosedError):
                            # client went away.
                            log.debug("worker %s client disconnected %s",
                                      self.getName(), self.caddr)
                            break
                    self.csock.close()
        finally:
            try:
                self.server.threadpool.remove(self)
            except KeyError:
                pass
        log.debug("worker %s stopping", self.getName())

    def handleConnection(self, conn):
        try:
            if self.callback.handshake(conn):
                return True
        except (socket.error, PyroError), x:
            log.warn("error during connect: %s", x)
            conn.close()
        return False
class SocketWorker(threadutil.Thread):
    """worker thread to process requests"""
    def __init__(self, server, callback):
        super(SocketWorker,self).__init__()
        self.setDaemon(True)
        self.server=server
        self.callback=callback
    def run(self):
        self.running=True
        try:
            log.debug("worker %s waiting for work", self.getName())
            while self.running: # loop over all connections in the queue
                self.csock,self.caddr = self.server.workqueue.get()
                if self.csock is None and self.caddr is None:
                    # this was a 'stop' sentinel
                    self.running=False
                    break
                log.debug("worker %s got a client connection %s", self.getName(), self.caddr)
                self.csock=SocketConnection(self.csock)
                if self.handleConnection(self.csock):
                    while self.running:   # loop over all requests during a single connection
                        try:
                            self.callback.handleRequest(self.csock)
                        except (socket.error,ConnectionClosedError):
                            # client went away.
                            log.debug("worker %s client disconnected %s", self.getName(), self.caddr)
                            break
                    self.csock.close()
        finally:
            try:
                self.server.threadpool.remove(self)
            except KeyError:
                pass
        log.debug("worker %s stopping", self.getName())
    def handleConnection(self,conn):
        try:
            if self.callback.handshake(conn):
                return True
        except (socket.error, PyroError), x:
            log.warn("error during connect: %s",x)
            conn.close()
        return False