• 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

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

  • 相关阅读:
    正定矩阵与半正定矩阵定义与判别
    LQR (线性二次型调节器)的直观推导及简单应用
    simulink模块使用方式
    无人驾驶领域现有的主流智能车辆仿真软件具体情况介绍
    什么是在环测试
    C# Dictionary 是否包含key
    jquery.显示隐藏切换
    easyui-dialog
    Visual Studio 命令行wsdl生成C#操作类
    使用C#创建Windows服务
  • 原文地址:https://www.cnblogs.com/zhaof/p/8893776.html
Copyright © 2020-2023  润新知