zoukankan      html  css  js  c++  java
  • SocketServer源码学习补充

    在前两个文章中整理了关于BaseServer部分以及BaseRequestHandler,以及通过对TCP的处理的流程的整理,这次整理的是剩下的关于用于扩展的部分,这里通过对线程扩展进行整理

    ThreadingMixIn

    ThreadingMixIn 类实现了多线程的方式,它只有两个方法,分别是process_request和 process_request_thread方法。

    process_request

    源码内容如下:

    def process_request_thread(self, request, client_address):
        """Same as in BaseServer but as a thread.
    
        In addition, exception handling is done here.
    
        """
        try:
            self.finish_request(request, client_address)
            self.shutdown_request(request)
        except:
            self.handle_error(request, client_address)
            self.shutdown_request(request)

    process_request方法复写了父类的此方法。以此为接口入口,对每一个请求,调用Thread开启一个新的线程。每一个线程都绑定process_request_thread方法。

    process_request_thread

    源码内容如下:

    def process_request(self, request, client_address):
        """Start a new thread to process the request."""
        t = threading.Thread(target = self.process_request_thread,
                             args = (request, client_address))
        t.daemon = self.daemon_threads
        t.start()

    process_request_thread方法和BaseServer里的parse_request几乎一样。只不过是多线程的方式调用。
    使用的时候,通过多继承调用接口,如源码中的:

    class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass

    到此为止基本的源码是过了一遍,剩下一个关于进程的扩展部分还没有看

  • 相关阅读:
    oracle_case when
    sql记录
    修改tomcat默认编码
    sql server_TED(透明数据加密)
    web请求过程
    freemarker 标签循环list 以及获取下标值
    鼠标操作
    窗口切换
    日历控件
    xpath定位
  • 原文地址:https://www.cnblogs.com/zhaof/p/8893776.html
Copyright © 2011-2022 走看看