天天看點

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

到此為止基本的源碼是過了一遍,剩下一個關于程序的擴充部分還沒有看

所有的努力都值得期許,每一份夢想都應該灌溉!

繼續閱讀