Python SocketServer

后端 未结 2 2062
情书的邮戳
情书的邮戳 2021-01-05 15:56

How can I call shutdown() in a SocketServer after receiving a certain message \"exit\"? As I know, the call to serve_forever() will bl

相关标签:
2条回答
  • 2021-01-05 16:09

    Use the source, Luke!

    Excerpt from SocketServer.py:

       def serve_forever(self, poll_interval=0.5):
            """Handle one request at a time until shutdown.
    
            Polls for shutdown every poll_interval seconds. Ignores
            self.timeout. If you need to do periodic tasks, do them in
            another thread.
            """
            self.__is_shut_down.clear()
            try:
                while not self.__shutdown_request:
                    # XXX: Consider using another file descriptor or
                    # connecting to the socket to wake this up instead of
                    # polling. Polling reduces our responsiveness to a
                    # shutdown request and wastes cpu at all other times.
                    r, w, e = select.select([self], [], [], poll_interval)
                    if self in r:
                        self._handle_request_noblock()
            finally:
                self.__shutdown_request = False
                self.__is_shut_down.set()
    
        def shutdown(self):
            """Stops the serve_forever loop.
    
            Blocks until the loop has finished. This must be called while
            serve_forever() is running in another thread, or it will
            deadlock.
            """
            self.__shutdown_request = True
            self.__is_shut_down.wait()
    
    0 讨论(0)
  • 2021-01-05 16:27

    No the serve_forever is checking a flag on a regular basis (by default 0.5 sec). Calling shutdown will raise this flag and cause the serve_forever to end.

    0 讨论(0)
提交回复
热议问题