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中的decode在mysql中的等价实现
    Perhaps you are running on a JRE rather than a JDK
    iisapp -a命令出现 :此脚本不能与WScript工作
    HDU 6070 线段树
    HDU 1853 MCMF
    Codeforces 7C 扩展欧几里得
    HDU 5675 智慧数
    Lucas 大组合数
    bzoj 2179 FFT
    POJ 1155 树形背包
  • 原文地址:https://www.cnblogs.com/zhaof/p/8893776.html
Copyright © 2011-2022 走看看