在前兩個文章中整理了關於BaseServer部分以及BaseRequestHandler,以及通過對TCP的處理的流程的整理,這次整理的是剩下的關於用於擴展的部分,這裡通過對線程擴展進行整理 ThreadingMixIn ThreadingMixIn 類實現了多線程的方式,它只有兩個方法,分別是pr ...
在前兩個文章中整理了關於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
到此為止基本的源碼是過了一遍,剩下一個關於進程的擴展部分還沒有看